Пример #1
0
 def dumps(self):
     if 'cmd' not in self.params:
         Log.e('cmd不存在')
         return None
     message = json.dumps(self.params)
     Log.i('生成Message: ' + message)
     return bytes(message).encode('utf-8')
Пример #2
0
 def dumps(self):
     if 'cmd' not in self.params:
         Log.e('cmd不存在')
         return None
     message = json.dumps(self.params)
     Log.i('生成Message: ' + message)
     return bytes(message).encode('utf-8')
Пример #3
0
    def startVM(self, request):
        clientId = request.getParam('clientId')
        if not clientId:
            Log.e('ExternalDispatcher.startVM: 权限不足')
            return
        if clientId not in self.server.clients:
            Log.e('ExternalDispatcher.startVM: 该客户端在服务器中不存在')
            return

        vmId = request['vmId']
        success, vmInfo = self.vm.startMachine(vmId)
        if not success:
            Log.e("启动虚拟机失败")
            EventManager.trigger(Event('Socket.addReply.' + clientId,
                                       Message(cmd=Message.CMD_VM_START_FAIL, vmId=vmId)))
            return
        else:
            Log.i('成功启动虚拟机: ' + str(vmInfo['name']))
            if clientId in self.externalToVm:
                self.externalToVm[clientId].append((vmId, vmInfo))
            else:
                self.externalToVm[clientId] = [(vmId, vmInfo)]
            EventManager.trigger(Event('Socket.addReply.' + clientId,
                                       Message(cmd=Message.CMD_VM_START_OK, vmId=vmId, port=vmInfo['port'],
                                               password=vmInfo['password'])))
            message = Message(cmd=Message.CMD_VM_UPDATED, vmId=vmId, status=VirtualMachine.Status_Running)
            EventManager.trigger(Event('Message.broadcast', message, ()))
Пример #4
0
    def startVM(self, request):
        clientId = request.getParam('clientId')
        if not clientId:
            Log.e('ExternalDispatcher.startVM: 权限不足')
            return
        if clientId not in self.server.clients:
            Log.e('ExternalDispatcher.startVM: 该客户端在服务器中不存在')
            return

        vmId = request['vmId']
        success, vmInfo = self.vm.startMachine(vmId)
        if not success:
            Log.e("启动虚拟机失败")
            EventManager.trigger(
                Event('Socket.addReply.' + clientId,
                      Message(cmd=Message.CMD_VM_START_FAIL, vmId=vmId)))
            return
        else:
            Log.i('成功启动虚拟机: ' + str(vmInfo['name']))
            if clientId in self.externalToVm:
                self.externalToVm[clientId].append((vmId, vmInfo))
            else:
                self.externalToVm[clientId] = [(vmId, vmInfo)]
            EventManager.trigger(
                Event(
                    'Socket.addReply.' + clientId,
                    Message(cmd=Message.CMD_VM_START_OK,
                            vmId=vmId,
                            port=vmInfo['port'],
                            password=vmInfo['password'])))
            message = Message(cmd=Message.CMD_VM_UPDATED,
                              vmId=vmId,
                              status=VirtualMachine.Status_Running)
            EventManager.trigger(Event('Message.broadcast', message, ()))
Пример #5
0
 def dispatchRequest(self, request):
     cmd = request.getCMD()
     if not cmd:
         Log.i('缺少cmd参数')
     identifier = request.getParam('identifier')
     EventManager.trigger(Event('Socket.addReply.' + identifier,
                                request))
Пример #6
0
 def acceptNewClient(self):
     Log.i('connect in')
     s, addr = self.serverSocket.accept()
     if not s:
         Log.e('Cannot accept connection')
         return
     identifier = uuid.uuid4().hex
     self.clients[identifier] = Socket(s, identifier)
     self.clients[identifier].addReply(Message(cmd=Message.CMD_CLIENT_VALIDATED, clientId=identifier))
     Log.i(self.clients)
Пример #7
0
 def loads(self, message):
     try:
         message = message.decode('utf-8')
     except UnicodeError:
         Log.e('无法使用utf-8解码消息: ' + binascii.hexlify(message))
         return False
     try:
         self.params = json.loads(message)
         Log.i('成功解析Message: ' + str(self.params))
     except Exception as e:
         Log.e(getExceptionInfo(e))
         return False
     return True
Пример #8
0
 def loads(self, message):
     try:
         message = message.decode('utf-8')
     except UnicodeError:
         Log.e('无法使用utf-8解码消息: ' + binascii.hexlify(message))
         return False
     try:
         self.params = json.loads(message)
         Log.i('成功解析Message: ' + str(self.params))
     except Exception as e:
         Log.e(getExceptionInfo(e))
         return False
     return True
Пример #9
0
 def connectToServer(self, address):
     """address格式为(url, port)"""
     if self.hasConnected(address):
         Log.w('已经连接到服务器')
         return
     clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     clientSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
     try:
         clientSocket.connect(address)
         client = Client(clientSocket, -1)
         self.clients[client] = (address, -1)
         Log.i('成功连接到服务器')
         return True
     except Exception as e:
         Log.e(getExceptionInfo(e))
Пример #10
0
 def dispatchRequest(self, client):
     Log.i('Default dispatcher: ' + str(client))
     Log.w('You need to setDispatcher for the Server')
     request = client.getRequest()
     cmd = request.getCMD()
     if cmd == Message.CMD_CLIENT_VALIDATED:
         client.setClientId(request['clientId'])
     message = Message(cmd=Message.CMD_QUERY_GPS, id=1)
     EventManager.trigger(Event('Client.replyReady.' + client.clientId, message))
     message = Message(cmd=Message.CMD_QUERY_GPS, id=2)
     EventManager.trigger(Event('Client.replyReady.' + client.clientId, message))
     message = Message(cmd=Message.CMD_QUERY_GPS, id=3)
     EventManager.trigger(Event('Client.replyReady.' + client.clientId, message))
     message = Message(cmd=Message.CMD_QUERY_GPS, id=4)
     EventManager.trigger(Event('Client.replyReady.' + client.clientId, message))
Пример #11
0
 def connectToServer(self, address):
     """address格式为(url, port)"""
     if self.hasConnected(address):
         Log.w('已经连接到服务器')
         return
     clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     clientSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
     try:
         clientSocket.connect(address)
         client = Client(clientSocket, -1)
         self.clients[client] = (address, -1)
         Log.i('成功连接到服务器')
         return True
     except Exception as e:
         Log.e(getExceptionInfo(e))
Пример #12
0
    def run(self):
        while True:
            brokenClients = []
            readers, writers = self.setFs()
            rList, wList, eList = select.select(readers, writers, [], 0.2)

            for client in self.clients:

                if client.getFd() in rList:
                    status = client.read()
                    if status == Client.ReadError:
                        Log.e('Socket read error')
                        brokenClients.append(client)

                    elif status == Client.NoMessage:
                        Log.i('No Message')
                        brokenClients.append(client)

                    elif status == Client.NewMessage:
                        Log.i('New Message')

                    else:
                        Log.e('Unknown socket status')

                if client.hasRequests():
                    self.treatMessage(client)

                if client.getFd() in wList:
                    status = client.reply()
                    if status == Client.WriteError:
                        Log.e('Socket write error with socket %s' %
                              (self.clients[client][0], ))
                        if client not in brokenClients:
                            brokenClients.append(client)
                    elif status == Client.WriteSuccess:
                        Log.i('Send Message success')

            for client in brokenClients:
                Log.i('删除客户端: ' + str(self.clients[client][0]))
                client.close()
                del self.clients[client]
                self.clientDisconnected.emit(str(client.clientId))
                Log.i(self.clients)
Пример #13
0
    def run(self):
        while True:
            brokenClients = []
            readers, writers = self.setFs()
            rList, wList, eList = select.select(readers, writers, [], 0.2)

            for client in self.clients:

                if client.getFd() in rList:
                    status = client.read()
                    if status == Client.ReadError:
                        Log.e('Socket read error')
                        brokenClients.append(client)

                    elif status == Client.NoMessage:
                        Log.i('No Message')
                        brokenClients.append(client)

                    elif status == Client.NewMessage:
                        Log.i('New Message')

                    else:
                        Log.e('Unknown socket status')

                if client.hasRequests():
                    self.treatMessage(client)

                if client.getFd() in wList:
                    status = client.reply()
                    if status == Client.WriteError:
                        Log.e('Socket write error with socket %s' % (self.clients[client][0], ))
                        if client not in brokenClients:
                            brokenClients.append(client)
                    elif status == Client.WriteSuccess:
                        Log.i('Send Message success')

            for client in brokenClients:
                Log.i('删除客户端: ' + str(self.clients[client][0]))
                client.close()
                del self.clients[client]
                self.clientDisconnected.emit(str(client.clientId))
                Log.i(self.clients)
Пример #14
0
 def dumps(self):
     reply = '{'
     if 'cmd' not in self.params:
         Log.e('cmd不存在')
         return None
     else:
         for count, name in enumerate(self.params):
             if count > 0:
                 reply += ', '
             reply += '"{name}": '.format(name=name)
             value = self.params[name]
             if isinstance(value, str) or isinstance(value, unicode):
                 reply += '"{value}"'.format(value=value)
             else:
                 reply += str(value)
     reply.rstrip(' ')
     reply += '}'
     Log.i('生成Reply: ' + reply)
     self.reply = bytes(reply).encode('utf-8')
     return self.reply
Пример #15
0
 def dumps(self):
     reply = '{'
     if 'cmd' not in self.params:
         Log.e('cmd不存在')
         return None
     else:
         for count, name in enumerate(self.params):
             if count > 0:
                 reply += ', '
             reply += '"{name}": '.format(name=name)
             value = self.params[name]
             if isinstance(value, str) or isinstance(value, unicode):
                 reply += '"{value}"'.format(value=value)
             else:
                 reply += str(value)
     reply.rstrip(' ')
     reply += '}'
     Log.i('生成Reply: ' + reply)
     self.reply = bytes(reply).encode('utf-8')
     return self.reply
Пример #16
0
    def run(self):
        while True:
            brokenClients = []
            readers, writers = self.setFs()
            rList, wList, eList = select.select(readers, writers, [], 0.2)
            if self.getFd() in rList:
                self.acceptNewClient()
            for identifier in self.clients:
                if self.clients[identifier].getFd() in rList:
                    status = self.clients[identifier].read()
                    if status == Socket.ReadError:
                        Log.e('Socket read error')
                        brokenClients.append(identifier)

                    elif status == Socket.NoMessage:
                        Log.i('No Message')
                        brokenClients.append(identifier)

                    elif status == Socket.NoMessage:
                        Log.i('New Message')

                if self.clients[identifier].hasRequests():
                    self.treatMessage(self.clients[identifier])

                if self.clients[identifier].getFd() in wList:
                    status = self.clients[identifier].reply()
                    if status == Socket.WriteError:
                        Log.e('Socket write error with socket %s' %
                              (identifier, ))
                        if identifier not in brokenClients:
                            brokenClients.append(identifier)
                    elif status == Socket.WriteSuccess:
                        Log.i('Send Message success')

            for identifier in brokenClients:
                Log.i('删除客户端: ' + str(identifier))
                self.clients[identifier].close()
                del self.clients[identifier]
                self.clientDisconnected.emit(identifier)
                Log.i(self.clients)
Пример #17
0
    def run(self):
        while True:
            brokenClients = []
            readers, writers = self.setFs()
            rList, wList, eList = select.select(readers, writers, [], 0.2)
            if self.getFd() in rList:
                self.acceptNewClient()
            for identifier in self.clients:
                if self.clients[identifier].getFd() in rList:
                    status = self.clients[identifier].read()
                    if status == Socket.ReadError:
                        Log.e('Socket read error')
                        brokenClients.append(identifier)

                    elif status == Socket.NoMessage:
                        Log.i('No Message')
                        brokenClients.append(identifier)

                    elif status == Socket.NoMessage:
                        Log.i('New Message')

                if self.clients[identifier].hasRequests():
                    self.treatMessage(self.clients[identifier])

                if self.clients[identifier].getFd() in wList:
                    status = self.clients[identifier].reply()
                    if status == Socket.WriteError:
                        Log.e('Socket write error with socket %s' % (identifier, ))
                        if identifier not in brokenClients:
                            brokenClients.append(identifier)
                    elif status == Socket.WriteSuccess:
                        Log.i('Send Message success')

            for identifier in brokenClients:
                Log.i('删除客户端: ' + str(identifier))
                self.clients[identifier].close()
                del self.clients[identifier]
                self.clientDisconnected.emit(identifier)
                Log.i(self.clients)
Пример #18
0
 def dispatchRequest(self, request):
     Log.i('Default dispatcher: ' + str(request))
     Log.w('You need to setDispatcher for the Server')
Пример #19
0
 def dispatchRequest(self, request):
     cmd = request.getCMD()
     if not cmd:
         Log.i('缺少cmd参数')
     identifier = request.getParam('identifier')
     EventManager.trigger(Event('Socket.addReply.' + identifier, request))
Пример #20
0
 def disConnectToServer(self, address):
     for client in self.clients:
         if self.clients[client][0] == address:
             client.close()
             del self.clients[client]
             Log.i('删除客户端: ' + str(self.clients[client][0]))
Пример #21
0
 def dispatchRequest(self, client):
     request = client.getRequest()
     Log.i('Default dispatcher: ' + str(request))
     Log.w('You need to setDispatcher for the Server')
Пример #22
0
 def disConnectToServer(self, address):
     for client in self.clients:
         if self.clients[client][0] == address:
             client.close()
             del self.clients[client]
             Log.i('删除客户端: ' + str(self.clients[client][0]))