コード例 #1
0
class HandleClientTearDown(ImmediateTask):
    """
    This class handles the message to teardown the client's session that arrives from an agent.
    """
    def __init__(self, session: AuctionSession):
        super(HandleClientTearDown, self).__init__()
        self.session = session
        self.template_container = IpapTemplateContainerSingleton()
        self.server_main_data = ServerMainData()
        self.bidding_manager = BiddingObjectManager(
            self.server_main_data.domain)
        self.auction_processor = AuctionProcessor(self.server_main_data.domain)
        self.server_message_processor = ServerMessageProcessor()

    def remove_bidding_object_from_processes(self,
                                             bidding_object: BiddingObject):
        """
        # remove a bidding object from all auction_processes

        :param bidding_object: bidding object to disassociate
        :return:
        """
        keys = bidding_object.get_participating_auction_processes().copy()
        for key in keys:
            self.auction_processor.delete_bidding_object_from_auction_process(
                key, bidding_object)

    async def _run_specific(self, **kwargs):
        try:

            bidding_object_keys = copy.deepcopy(
                self.bidding_manager.get_bidding_objects_by_session(
                    self.session.get_key()))

            for bidding_object_key in bidding_object_keys:
                bidding_object = self.bidding_manager.get_bidding_object(
                    bidding_object_key)
                self.remove_bidding_object_from_processes(bidding_object)
                await bidding_object.stop_tasks()
                self.bidding_manager.delete_bidding_object(bidding_object_key)

        except ValueError:
            # This means that the session does not have bidding objects associated
            pass
コード例 #2
0
class HandleRemoveBiddingObjectByAuction(ImmediateTask):
    """
    This class remove all bidding objects that was created for an auction.
    """

    def __init__(self, auction: Auction):
        super(HandleRemoveBiddingObjectByAuction, self).__init__()
        self.client_data = ClientMainData()
        self.bidding_object_manager = BiddingObjectManager(self.client_data.domain)
        self.auction = auction

    async def _run_specific(self):
        """
        delete all binding objects related with the auction

        :return:
        """
        bidding_object_keys = deepcopy(
            self.bidding_object_manager.get_bidding_objects_by_parent(self.auction.get_key()))
        for bidding_object_key in bidding_object_keys:
            self.logger.info("removing bidding object: {0}".format(bidding_object_key))
            bidding_object = self.bidding_object_manager.get_bidding_object(bidding_object_key)
            await bidding_object.stop_tasks()
            self.bidding_object_manager.delete_bidding_object(bidding_object_key)