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 send_create_basket_message(self): """ Send a create basket message. return: basket code (uuid) """ message = MessageManager.create_basket_message(basket_code=None) message_response = Message.deserialize( self._send_message(message.serialize())) return message_response.content['basket_code']
def send_get_checkout_message(self, basket_code): """ Send a get checkout from a basket message basket_code: uuid return: total value (float) """ message = MessageManager.get_checkout_message(basket_code=basket_code) message_response = Message.deserialize( self._send_message(message.serialize())) return message_response.content['total']
def send_remove_basket_message(self, basket_code): """ Send a remove basket message basket_code: uuid return: Message object """ message = MessageManager.remove_basket_message(basket_code) message_response = Message.deserialize( self._send_message(message.serialize())) return message_response.serialize()
def send_get_products_message(self, basket_code): """ Send a get products from a basket message basket_code: uuid return: Message object """ message = MessageManager.get_products_message(basket_code=basket_code) message_response = Message.deserialize( self._send_message(message.serialize())) return message_response.content['products']
def send_add_product(self, basket_code, product_code): """ Send an add product to basket message basket_code: uuid product_code: Code of a products (str) return: Message object """ message = MessageManager.add_product_message(basket_code=basket_code, product_code=product_code) message_response = Message.deserialize( self._send_message(message.serialize())) return message_response.serialize()
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()
def checkout(basket_code): total = manager.checkout(basket_code) return MessageManager.get_checkout_message(total=total)
def get_products(basket_code): products = manager.get_products(basket_code) return MessageManager.get_products_message(products=products)
def remove_product(basket_code, product_code): manager.remove_product(basket_code, product_code) return MessageManager.create_ack_message()
def add_product(basket_code, product_code): manager.add_product(basket_code, product_code) return MessageManager.create_ack_message()
def remove_basket(basket_code): manager.remove(basket_code) return MessageManager.create_ack_message()
def create_basket(): basket_code = manager.create() return MessageManager.create_basket_message(basket_code)