Example #1
0
    def run(self):

        self.inputs.append(self.client1)
        self.inputs.append(self.client2)
        self.message_queues[self.client1] = queue.Queue()
        self.message_queues[self.client2] = queue.Queue()

        ## create server pool
        self.server = CommServer(self, self.client1, self.client2)
        ## create game
        self.game = GameLogic(self.server)
        self.set_ind(self.server)
        self.server.set_ind(self.game)

        while self.inputs:
            try:
                readable, writable, exceptional = select.select(self.inputs, self.outputs, self.inputs, 1)
            except select.error:
                pass
            for s in readable:
                data = s.recv(1024)
                if data:
                    print("received data '{}' from {}".format(data, s.getpeername()))
                    self.ind.received_ind(data, s)
                else:
                    print("closing connection {}".format(s.getpeername()))
                    self.inputs.remove(s)
                    if s in self.outputs:
                        self.outputs.remove(s)
                    s.close()
                    del self.message_queues[s]
                    self.ind.close_connection_ind(s)

            for s in writable:
                try:
                    next_msg = self.message_queues[s].get_nowait()
                except queue.Empty:
                    print("Error, queue empty")
                    pass
                else:
                    print("sending message '{}' to {}".format(next_msg, s.getpeername()))
                    self.outputs.remove(s)
                    s.send(next_msg)
Example #2
0
class ClientThread(ITransReq, threading.Thread): #A server thread

    def __init__(self, client1, client2):
        self.client1      = client1[0]
        self.client2      = client2[0]
        self.client1_info = client1[1]
        self.client2_info = client2[1]
        self.ind = None
        self.inputs  = []
        self.outputs = []
        self.message_queues = {}
        super().__init__()


    def run(self):

        self.inputs.append(self.client1)
        self.inputs.append(self.client2)
        self.message_queues[self.client1] = queue.Queue()
        self.message_queues[self.client2] = queue.Queue()

        ## create server pool
        self.server = CommServer(self, self.client1, self.client2)
        ## create game
        self.game = GameLogic(self.server)
        self.set_ind(self.server)
        self.server.set_ind(self.game)

        while self.inputs:
            try:
                readable, writable, exceptional = select.select(self.inputs, self.outputs, self.inputs, 1)
            except select.error:
                pass
            for s in readable:
                data = s.recv(1024)
                if data:
                    print("received data '{}' from {}".format(data, s.getpeername()))
                    self.ind.received_ind(data, s)
                else:
                    print("closing connection {}".format(s.getpeername()))
                    self.inputs.remove(s)
                    if s in self.outputs:
                        self.outputs.remove(s)
                    s.close()
                    del self.message_queues[s]
                    self.ind.close_connection_ind(s)

            for s in writable:
                try:
                    next_msg = self.message_queues[s].get_nowait()
                except queue.Empty:
                    print("Error, queue empty")
                    pass
                else:
                    print("sending message '{}' to {}".format(next_msg, s.getpeername()))
                    self.outputs.remove(s)
                    s.send(next_msg)
        #Thread exits
        #print("Thread exit")


    def req_open_connection(self, host):
        pass

    def set_ind(self, commserver):
        self.ind = commserver

    def req_send(self, data, player):
            self.message_queues[player].put(data)
            self.outputs.append(player)

    def req_close_connection(self):
        self.client1.close()
        self.client2.close()
        self.inputs = []