def bootClient(SERVER_DETAILS): client = Client() (client.speakSocket, serializedClientID) = n.openSpeakPort(SERVER_DETAILS) # Sleep: fudge so that the sender socket # definitely gets opened first. # Things WON'T break if two clients connect # within 0.1 seconds of each other. time.sleep(0.1) client.listenSocket = n.openListenPort(SERVER_DETAILS, serializedClientID) client.ID = unserialize(serializedClientID) # "In" = "in from server"; "Out" = "out to GUI" client.messageIn = Queue.Queue() client.messageTreeOut = Queue.Queue() client.baseMessageTree = unserialize(n.receive(client.listenSocket)) client.baseMessageTree.message.ID = 0 client.messageTreeOut.put(client.baseMessageTree) speakThread = threading.Thread(target=speak, args=(client.speakSocket, client)) speakThread.daemon = True speakThread.start() listenThread = threading.Thread(target=listen, args=(client.listenSocket, client)) listenThread.daemon = True listenThread.start() return client
def handle(self): # socketType refers to whether the socket is a speaker # or listener from the _client's_ point of view. socketType = n.receive(self.request) if socketType == "speak": server.clientIDLock.acquire() clientID = server.clientIDCounter server.clientIDCounter += 1 server.clientIDLock.release() # Tell the client its ID. n.send(self.request, serialize(clientID)) print( "[" + self.client_address[0] + " connected as client " + str(clientID) + ".]") # Create a queue corresponding to this client. server.messages.append(Queue.Queue()) while True: serializedMessage = n.receive(self.request) if serializedMessage: message = unserialize(serializedMessage) print ( "[" + message.__class__.__name__ + ": " + str(message) + "]") assignID(message) server.distributionQueue.put(message) newMessageTree = trees.MessageTree(message) server.baseMessageTree.append(newMessageTree) else: break print "[Client " + str(clientID) + " quit.]" else: assert socketType[0:6] == "listen" clientID = int(unserialize(socketType[6:])) n.send(self.request, serialize(server.baseMessageTree)) # While the client is still listening... while n.receive(self.request) == "still here": # ...send a message from the queue # corresponding to this client. n.send(self.request, serialize( server.messages[clientID].get() ))
def listen(sock, client): while True: n.send(sock, "still here") newMessage = unserialize(n.receive(sock)) newMessageTree = trees.MessageTree(newMessage) client.baseMessageTree.append(newMessageTree) client.messageTreeOut.put(newMessageTree)
def handle(self): # socketType refers to whether the socket is a speaker # or listener from the _client's_ point of view. socketType = n.receive(self.request) if socketType == "speak": server.clientIDLock.acquire() clientID = server.clientIDCounter server.clientIDCounter += 1 server.clientIDLock.release() # Tell the client its ID. n.send(self.request, serialize(clientID)) print("[" + self.client_address[0] + " connected as client " + str(clientID) + ".]") # Create a queue corresponding to this client. server.messages.append(Queue.Queue()) while True: serializedMessage = n.receive(self.request) if serializedMessage: message = unserialize(serializedMessage) print("[" + message.__class__.__name__ + ": " + str(message) + "]") assignID(message) server.distributionQueue.put(message) newMessageTree = trees.MessageTree(message) server.baseMessageTree.append(newMessageTree) else: break print "[Client " + str(clientID) + " quit.]" else: assert socketType[0:6] == "listen" clientID = int(unserialize(socketType[6:])) n.send(self.request, serialize(server.baseMessageTree)) # While the client is still listening... while n.receive(self.request) == "still here": # ...send a message from the queue # corresponding to this client. n.send(self.request, serialize(server.messages[clientID].get()))
def queryForImport(): response = raw_input() if response == "y": server.baseMessageTree = unserialize(file.read()) print "[Read message tree from .messages; proceeding.]" elif response == "n": print "[Proceeding without importing from .messages.]" else: print "[y/n]" queryForImport()