From 21bc86fa8aab7e2fae1b966ee8b831187e7e24e2 Mon Sep 17 00:00:00 2001 From: Artur Borecki Date: Mon, 22 Sep 2025 21:09:45 +0200 Subject: [PATCH] feat(client.py): add `Client` class --- src/judas_client/client.py | 67 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/judas_client/client.py diff --git a/src/judas_client/client.py b/src/judas_client/client.py new file mode 100644 index 0000000..6937d08 --- /dev/null +++ b/src/judas_client/client.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +"""Client module for handling messages.""" + +from __future__ import annotations + +import logging as lg +import uuid + +from judas_protocol import Message + +from judas_client import Connector + + +class Client: + """Client class for handling messages.""" + + def __init__(self, server_host: str, server_port: int) -> None: + """Initialize the Client. + + Args: + server_host (str): The server host address. + server_port (int): The server port number. + """ + self.logger: lg.Logger = lg.getLogger( + f"{__name__}.{self.__class__.__name__}" + ) + self.logger.debug("Initializing Client...") + + self.server_host: str = server_host + self.server_port: int = server_port + + self.mac_address: str = self._get_mac_address() + self.logger.debug(f"MAC address: {self.mac_address}") + + self.connector: Connector = Connector( + mac_address=self.mac_address, + host=self.server_host, + port=self.server_port, + on_message=self.handle_message, + ) + + def _get_mac_address(self) -> str: + """Get the MAC address of the client. + + Returns: + str: The MAC address in standard lowercase format (e.g., "0a:1b:2c:3d:4e:5f"). + """ + mac_address: str = ":".join( + [ + "{:02x}".format((uuid.getnode() >> ele) & 0xFF) + for ele in range(0, 8 * 6, 8) + ][::-1] + ) + return mac_address + + def handle_message(self, message: Message) -> None: + """Handle incoming messages. + + Args: + message (Message): The incoming message to handle. + """ + self.logger.info(f"[v] Received message: {message}") + + def run(self) -> None: + """Run the client.""" + self.logger.info(f"Starting Client ({self.mac_address})...") + self.connector.run()