Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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()