Ejemplo n.º 1
0
    def onPacketReceived(self, data):
        packet = data[0]
        sendFunc = data[1]
        def respond(value):
            sendFunc(('{"%s":"%s"}\n' % ("response", value)).encode("UTF-8"))

        if "command" in packet:
            args = packet["command"].split(" ")

            if args[0] == "ping":
                respond("pong")

            elif args[0] == "handshake":
                gen = self.queuemanager.generateID()
                respond("handshook %s"%gen)
                EventHandler.callEvent(Events.CLIENT_CONNECT, gen)

            elif args[0] == "cookieDump":
                self.logger.debug("Cookie dump: %s"%args[1])
                respond("ok")

            elif args[0] == "queue":
                result = self.queuemanager.addToQueue(args[1])
                if result:
                    respond("queued")
                else:
                    respond("error")

            elif args[0] == "getControlTime":
                respond(str(Config.CONTROL_TIME))

            elif args[0] == "getQueuedPeople":
                respond(self.queuemanager.getPlaceInQueue(args[1]))

            elif args[0] == "getETA":
                respond(self.queuemanager.getTimeUntilTurn(args[1]))

            elif args[0] == "isTurn":
                respond(self.queuemanager.isTurn(args[1]))

            elif args[0] == "robot":
                self.handleRobotCommand(args, sendFunc)

            else:
                respond("UNKNOWN COMMAND")

        else:
            respond("Command not found")
    def handle(self):
        self.running = True
        EventHandler.addListener("onQuit"+str(current_thread().ident), Events.SERVER_SHUTDOWN, self.shutdown)
        self.logger = logging.getLogger(Config.LOGGING_NAME+".SocketServer.RequestHandler")
        #self.logger.debug("Connection from %s", self.client_address)

        packetStarted = False
        packetContents = ""
        while self.running:
            receivedData = self.request.recv(1)
            if not receivedData: break  # If there is no dataz, then probably the client disconnected.
            try:
                receivedData = receivedData.decode("utf-8")
            except:
                continue

            if not packetStarted:       # If the packetStarted flag has not been set, set it when "{" is received
                if receivedData == "~":
                    packetStarted = True
                    packetContents = packetContents + "{"
            elif packetStarted:         # If the packet has started, append stuff to it until "}" is received
                if receivedData == "~":
                    packetContents = packetContents + "}"
                    packetStarted = False

                    # If the packet is valid, then fire an event - if not report it through logging
                    try:
                        EventHandler.callEvent(Events.PACKET_RECEIVED, (literal_eval(packetContents), self.request.send))
                        packetContents = ""
                        packetContents = ""
                    except ValueError:
                        self.logger.error(packetContents)
                        self.logger.error("Malformed packet! - VALUE ERROR")
                        packetContents = ""
                        break
                    except SyntaxError:
                        self.logger.error(packetContents)
                        self.logger.error("Malformed packet! - SYNTAX ERROR")
                        packetContents = ""
                        break

                else:
                    packetContents = packetContents + receivedData

        self.request.close()
Ejemplo n.º 3
0
 def shutdown(self):
     EventHandler.callEvent(Events.SERVER_SHUTDOWN, None)
     exit()