Пример #1
0
 def __init__(self, port, id, answers, sleeps):
     self.id = id
     self.socket = ClientObjectSocket.get_cosserver(port)
     self.running = True
     self.answers = answers
     self.sleeps = sleeps
     self.answer_idx = 0
Пример #2
0
    def startReceiving(self):
        """Start the server socket and listening on it.

        On every incoming connection, retrieve all objects from the connection.  These
        objects are put in the recvQueue.
        """
        self.logger.info(f"Start receiving on {self.id}")
        server = ClientObjectSocket.get_cosserver(self.config[self.id]["port"])

        def listen_on_connection(s):
            # if the listensocket closes or has error, just drop it
            try:
                while self._isRunning("listen_on_connection"):
                    try:
                        received_object = s.recv_object()
                        # store socket to client to be able to reply
                        if isinstance(received_object.payload, ClientRequest):
                            self.clientsockets[received_object.sender_id] = s
                        self.recvQueue.put(received_object, block=False)
                    except socket.timeout:
                        continue  # expected timeout; needed to check if recvRunning is still true
                    except queue.Full:
                        self.logger.debug(
                            f"RaftServer({self.id}): recvQueue is full dropping message {received_object}."
                        )
                    self.logger.debug(
                        f"Server {self.id} received object {received_object}")
            except COSConnectionClosed as e:
                s.close()
                self.logger.debug("listening socket closed")
            except Exception as e:
                self.logger.debug(
                    f"Server {self.id}: Unexpected exception in listedn_on_connection_fn: {e}."
                )
                raise

        def listen_for_connections():
            while self._isRunning("listen_for_connections"):
                try:
                    (client, addr) = server.accept()
                    self.logger.debug("Connection from %s", addr)
                    threading.Thread(
                        target=listen_on_connection,
                        args=(client, ),
                        name=f"RaftServer({self.id}): listen_on_connection",
                    ).start()
                except socket.timeout:
                    continue  # expected timeout; needed to check if sendRunning is still true
                except:
                    self.logger.debug(
                        "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"
                    )

        self.listening_thread = threading.Thread(
            target=listen_for_connections,
            name=f"RaftServer({self.id}): listen_for_connections.",
        )
        self.listening_thread.start()
        self.logger.info("Started server thread for server %d", self.id)
Пример #3
0
def test_send_object_across():
    port = random.randint(20000, 30000)
    server = ClientObjectSocket.get_cosserver(port)
    client = ClientObjectSocket.get_cosclient(port)

    client.send_object("hello")
    client.send_object("hello2")
    (sclient, _) = server.accept()
    assert sclient.recv_object() == "hello"
    assert sclient.recv_object() == "hello2"