class ClientConnectionHandler(Thread): def __init__(self, host, port, name, comm_service): super(ClientConnectionHandler, self).__init__() self._host = host self._port = port self._name = name self._communication_service = comm_service self._logger = logging.getLogger(self.__class__.__name__) self._socket_wrapper = None self._send_handler = None self._receive_handler = None self._master_node_name = None self._running = True def run(self): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self._socket_wrapper = SocketReadWrite(s) self._logger.info('Connecting to master node.') s.connect((self._host, self._port)) client = self.handshake(self._socket_wrapper) self._communication_service.add_client(client) self._logger.info('Connection to master node successful.') self._receive_handler = ReceiveHandler(self._communication_service, self._socket_wrapper, client) self._receive_handler.start() self._send_handler = SendHandler(self._communication_service, client) self._send_handler.start() while self._running: time.sleep(5) self._send_handler.stop() self._send_handler.join() self._receive_handler.stop() self._receive_handler.join() self._socket_wrapper.close() self._logger.info("Client Connection Handler [%s] run complete.", self._name) def send(self, target_name, target_service, message): self._send_handler.send(target_name, target_service, message) def handshake(self, socket_wrapper): socket_wrapper.write(self._name) self._master_node_name = socket_wrapper.read() client = Client(self._master_node_name, socket_wrapper) self._logger.info('Handshake complete with the master node [%s]', self._master_node_name) return client def stop(self): self._running = False self._logger.info("Client Connection Handler [%s] stop requested.", self._name)
def do_work(self): try: (client_socket, address) = self._socket.accept() except socket.timeout: raise TimeoutError self._logger.info('New client request received from [%s:%d]', address[0], address[1]) client_socket_wrapper = SocketReadWrite(client_socket) client = self.handshake(client_socket_wrapper) self._clients.append(client) self.get_parent().add_client(client) receive_handler = ReceiveHandler(parent=self, socket_wrapper=client_socket_wrapper, client=client) receive_handler.start() self._handlers.append(receive_handler) send_handler = SendHandler(parent=self, client=client) send_handler.startup() self._handlers.append(send_handler) client.set_handlers(receive_handler, send_handler) return True
class ClientConnectionHandler(Service): def construct(self, config={}): self._host = config.get('host', 'localhost') self._port = config.get('port', 4545) self._socket_wrapper = None self._send_handler = None self._receive_handler = None self._node_name = config.get('node_name', 'Worker') self._master_node_name = None self._timeout = 1 def init(self): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self._socket_wrapper = SocketReadWrite(s) self._logger.info('Connecting to master node.') s.connect((self._host, self._port)) client = self.handshake(self._socket_wrapper) self.get_parent().add_client(client) self._logger.info('Connection to master node successful.') self._receive_handler = ReceiveHandler(parent=self, socket_wrapper=self._socket_wrapper, client=client) self._receive_handler.start() self._send_handler = SendHandler(parent=self, client=client) self._send_handler.start() def deinit(self): self._socket_wrapper.close() def do_work(self): time.sleep(self._timeout) raise TimeoutError def send(self, target_name, target_service, message): self._send_handler.send(target_name, target_service, message) def handshake(self, socket_wrapper): socket_wrapper.write(self._node_name) self._master_node_name = socket_wrapper.read() client = Client(self._master_node_name, socket_wrapper) self._logger.info('Handshake complete with the master node [%s]', self._master_node_name) return client
def init(self): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self._socket_wrapper = SocketReadWrite(s) self._logger.info('Connecting to master node.') s.connect((self._host, self._port)) client = self.handshake(self._socket_wrapper) self.get_parent().add_client(client) self._logger.info('Connection to master node successful.') self._receive_handler = ReceiveHandler(parent=self, socket_wrapper=self._socket_wrapper, client=client) self._receive_handler.start() self._send_handler = SendHandler(parent=self, client=client) self._send_handler.start()
def run(self): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self._socket_wrapper = SocketReadWrite(s) self._logger.info('Connecting to master node.') s.connect((self._host, self._port)) client = self.handshake(self._socket_wrapper) self._communication_service.add_client(client) self._logger.info('Connection to master node successful.') self._receive_handler = ReceiveHandler(self._communication_service, self._socket_wrapper, client) self._receive_handler.start() self._send_handler = SendHandler(self._communication_service, client) self._send_handler.start() while self._running: time.sleep(5) self._send_handler.stop() self._send_handler.join() self._receive_handler.stop() self._receive_handler.join() self._socket_wrapper.close() self._logger.info("Client Connection Handler [%s] run complete.", self._name)
def run(self): self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.socket.settimeout(5) self.socket.bind((self._host, self._port)) self.socket.listen(5) while self._running: try: (client_socket, address) = self.socket.accept() except socket.timeout: continue self._logger.info('New client request received from [%s:%d]', address[0], address[1]) client_socket_wrapper = SocketReadWrite(client_socket) client = self.handshake(client_socket_wrapper) self._clients.append(client) self._communication_service.add_client(client) receive_handler = ReceiveHandler(self._communication_service, client_socket_wrapper, client) receive_handler.start() self._handlers.append(receive_handler) send_handler = SendHandler(self._communication_service, client) send_handler.start() self._handlers.append(send_handler) client.set_handlers(receive_handler, send_handler) for handler in self._handlers: handler.stop() handler.join() for client in self._clients: client.close() self._logger.info("Server Connection Handler [%s] run complete.", self._name)