NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

recommendationMessenger.py (2881B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\recommendation\message_bus\recommendationMessenger.py
      2 import httplib
      3 import logging
      4 import uthread2
      5 from eve.client.script.ui.shared.recommendation.const import UPDATE_TIMEOUT_SECONDS
      6 from eveProto.generated.eve_public.app.eveonline.operation.recommendation.recommendation_pb2 import Accepted, Dismissed
      7 from eveProto.generated.eve_public.app.eveonline.operation.recommendation.ui_pb2 import Displayed
      8 from eveProto.generated.eve_public.operation.recommendation.recommendation_pb2 import GetRequest, GetResponse
      9 from stackless_response_router.exceptions import TimeoutException
     10 logger = logging.getLogger(__name__)
     11 
     12 class RecommendationMessenger(object):
     13     public_gateway = None
     14 
     15     def __init__(self, public_gateway):
     16         self.public_gateway = public_gateway
     17 
     18     def accepted(self, operation_id, journey_id):
     19         event = Accepted()
     20         event.operation.sequential = int(operation_id)
     21         self.public_gateway.publish_event_payload(event, journey_id)
     22 
     23     def dismissed(self, operation_id, journey_id):
     24         event = Dismissed()
     25         event.operation.sequential = int(operation_id)
     26         self.public_gateway.publish_event_payload(event, journey_id)
     27 
     28     def displayed(self, operation_id, journey_id):
     29         event = Displayed()
     30         event.operation.sequential = int(operation_id)
     31         self.public_gateway.publish_event_payload(event, journey_id)
     32 
     33     def request_recommendations(self, amount, allow_old, response_function, timeout_function):
     34         request = GetRequest()
     35         request.amount = amount
     36         request.allow_old = allow_old
     37 
     38         def _response_handler(primitive, payload):
     39             if primitive.status_code != httplib.OK:
     40                 logger.error('unexpected error when requesting recommendations - statusCode: %d, statusMessage: %s', primitive.status_code, primitive.status_message)
     41             else:
     42                 response_function(payload.operation_recommendations)
     43 
     44         def _timeout_handler(timeout_exception):
     45             logger.error('request_recommendations timed out: %s' % timeout_exception, exc_info=True)
     46             timeout_function()
     47 
     48         uthread2.StartTasklet(self._send_request_and_wait_for_response, request, GetResponse, _response_handler, _timeout_handler)
     49 
     50     def _send_request_and_wait_for_response(self, request, expected_response_class, response_handler, timeout_handler = None):
     51         request_primitive, response_channel = self.public_gateway.send_character_request(request, expected_response_class, UPDATE_TIMEOUT_SECONDS)
     52         try:
     53             response_primitive, payload = response_channel.receive()
     54             response_handler(response_primitive, payload)
     55         except TimeoutException as e:
     56             if timeout_handler is not None:
     57                 timeout_handler(e)