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
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''