class ClientThread(Thread):
    def __init__(self, client, debug):
        Thread.__init__(self)

        self.client = client
        self.device = Device(self.client)
        self.debug = debug

    def recvall(self, size):
        data = []
        while size > 0:
            self.client.settimeout(5.0)
            s = self.client.recv(size)
            self.client.settimeout(None)
            if not s:
                raise EOFError
            data.append(s)
            size -= len(s)
        return b''.join(data)

    def run(self):
        while True:
            header = self.client.recv(7)
            packetid = int.from_bytes(header[:2], 'big')
            length = int.from_bytes(header[2:5], 'big')
            version = int.from_bytes(header[5:], 'big')
            data = self.recvall(length)

            if len(header) >= 7:
                if length == len(data):
                    print('[*] {} received'.format(packetid))

                    try:
                        decrypted = self.device.decrypt(data)
                        if packetid in availablePackets:

                            Message = availablePackets[packetid](decrypted,
                                                                 self.device)

                            Message.decode()
                            Message.process()

                        else:
                            if self.debug:
                                print('[*] {} not handled'.format(packetid))

                    except:
                        if self.debug:
                            print('[*] Error while decrypting / handling {}'.
                                  format(packetid))
                            traceback.print_exc()
                else:
                    print(
                        '[*] Incorrect Length for packet {} (header length: {}, data length: {})'
                        .format(packetid, length, len(data)))
            else:
                if self.debug:
                    print('[*] Received an invalid packet from client')
                self.client.close()
 def __init__(self, client, address, db):
     super().__init__()
     self.client = client
     self.address = address
     self.db = db
     self.config = json.loads(open('config.json', 'r').read())
     self.device = Device(self.client)
     self.player = Player(self.device)
    def __init__(self, client, debug):
        Thread.__init__(self)

        self.client = client
        self.device = Device(self.client)
        self.debug = debug
示例#4
0
 def __init__(self, client, address):
     super().__init__()
     self.client = client
     self.address = address
     self.device = Device(self.client)
     self.player = Players(self.device)
 def __init__(self, settings):
     Device.__init__(self)
     self.settings = settings
     self.buffer = b''
     self.packet = b''