コード例 #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
コード例 #2
0
    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']
コード例 #3
0
    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']
コード例 #4
0
    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()
コード例 #5
0
    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']
コード例 #6
0
    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()
コード例 #7
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()
コード例 #8
0
def checkout(basket_code):
    total = manager.checkout(basket_code)
    return MessageManager.get_checkout_message(total=total)
コード例 #9
0
def get_products(basket_code):
    products = manager.get_products(basket_code)
    return MessageManager.get_products_message(products=products)
コード例 #10
0
def remove_product(basket_code, product_code):
    manager.remove_product(basket_code, product_code)
    return MessageManager.create_ack_message()
コード例 #11
0
def add_product(basket_code, product_code):
    manager.add_product(basket_code, product_code)
    return MessageManager.create_ack_message()
コード例 #12
0
def remove_basket(basket_code):
    manager.remove(basket_code)
    return MessageManager.create_ack_message()
コード例 #13
0
def create_basket():
    basket_code = manager.create()
    return MessageManager.create_basket_message(basket_code)