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)