class Processor(object): def __init__(self, prefix, users, logger): self.prefix = prefix self.ackTime = str(datetime.datetime.now().time()) self.clientHandler = ClientHandler(users) self.logger = logger def terminated(self): return self.isTerminated def getType(self, message): return unpack_from('B', message, 8)[0] ''' Main method- processing the data, given connection established with the user''' def process(self, data, connection): """ :param data: :param connection: :return: """ current_sender, msg_type, bodyLen = connection, self.getType( data), unpack_from('>i', data, 9)[0] if self.checkForAuthCode(data) is not 0: self.send_to_user(current_sender, NotAuthorizedErrorPacket().build_packet()) return ''' GOT KEEP-ALIVE PACKET''' if msg_type == 0x00: self.logger.info("Got from client Keep Alive Packet") self.clientHandler.handle_keep_alive(current_sender) ''' GOT CONNECT PACKET''' elif msg_type == 0x01: self.logger.info("Got from client CONNECT Packet") self.clientHandler.handle_connect(current_sender, bodyLen, data) ''' GOT DISCONNECT PACKET''' elif msg_type == 0x02: self.logger.info("Got from client DISCONNECT Packet") self.clientHandler.handle_disconnect(current_sender) ''' GOT PUBLIC MESSAGE PACKET''' elif msg_type == 0x03: self.logger.info("Got from client PUBLIC MESSAGE Packet") self.clientHandler.handle_public(current_sender, bodyLen, data) ''' GOT PRIVATE MESSAGE PACKET''' elif msg_type == 0x04: self.logger.info("Got from client PRIVATE MESSAGE Packet") self.clientHandler.handle_private(current_sender, bodyLen, data) ''' GOT SUDDEN DISCONNECT PACKET''' elif msg_type == 0x05: self.logger.info("Got from client SUDDEN DISCONNECT Packet") self.clientHandler.handle_SuddenDiscconnect(current_sender) ''' GOT UNIDENTIFIED PACKET''' else: self.logger.info("Got from client UNIDENTIFIED Packet") self.clientHandler.handle_unidentified(current_sender) ''' Checks weather given message is formatted according to protocol''' def checkForAuthCode(self, authBuffer): msCode = unpack_from('B' * 8, authBuffer, 0) return cmp(msCode, self.prefix)