def listen(self): print(f'Listening in {self.host}:{self.port}...\n\n') with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: sock.bind((self.host, self.port)) while True: sock.listen() conn, addr = sock.accept() with conn: while True: data = conn.recv(1024) if not data: raise Exception('Client disconnected') print(f'Received: {data}') try: message_resp = self.message_handler(message=Message.deserialize(data)) except: message_resp = MessageManager.create_invalid_message() conn.sendall(str.encode(f'{message_resp.serialize()}')) break
def message_handler(self, message): """ Message handler. Translate every received message in a valid manager action and returns a valid message with the response of the action. message: MessageItem object return: MessageItem object """ if message.code == Message.CREATE_BASKET_MESSAGE: basket_code = self.manager.create() return MessageManager.create_basket_message(basket_code) if message.code == Message.REMOVE_BASKET_MESSAGE: basket_code = message.content['basket_code'] self.manager.remove(basket_code) return MessageManager.create_ack_message() if message.code == Message.ADD_PRODUCT_MESSAGE: basket_code = message.content['basket_code'] product_code = message.content['product_code'] self.manager.add_product(basket_code, product_code) return MessageManager.create_ack_message() if message.code == Message.REMOVE_PRODUCT_MESSAGE: basket_code = message.content['basket_code'] product_code = message.content['product_code'] self.manager.remove_product(basket_code, product_code) return MessageManager.create_ack_message() if message.code == Message.GET_PRODUCTS_MESSAGE: basket_code = message.content['basket_code'] products = self.manager.get_products(basket_code) return MessageManager.get_products_message(products=products) if message.code == Message.GET_CHECKOUT_MESSAGE: basket_code = message.content['basket_code'] total = self.manager.checkout(basket_code) return MessageManager.get_checkout_message(total=total) return MessageManager.create_invalid_message()