Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
    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()
                    ))
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
    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()))
Exemple #7
0
 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()
Exemple #8
0
 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()