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 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