gateLockMessenger.py (4570B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\stargate\client\gateLockMessenger.py 2 from datetime import datetime 3 from six.moves import http_client as httplib 4 import logging 5 from eveProto.generated.eve_public.stargate.lock.api.notices_pb2 import RestrictedSystemsNotice, ActivatedNotice, DeactivatedNotice 6 from eveProto.generated.eve_public.stargate.lock.api.requests_pb2 import GetRequest, GetResponse, GetRestrictedSystemsRequest, GetRestrictedSystemsResponse 7 from stargate.common.lock_details import LockDetails 8 from stackless_response_router.exceptions import TimeoutException 9 logger = logging.getLogger(__name__) 10 TIMEOUT = 5 11 12 class ClientGateLockMessenger(object): 13 14 def __init__(self, public_gateway): 15 self.public_gateway = public_gateway 16 self._restricted_systems_notice_callback = None 17 self._activated_notice_callback = None 18 self._deactivated_notice_callback = None 19 20 def subscribe_to_restricted_systems_notice(self, callback): 21 self._restricted_systems_notice_callback = callback 22 self.public_gateway.subscribe_to_notice(RestrictedSystemsNotice, self._on_restricted_systems_notice) 23 24 def _on_restricted_systems_notice(self, payload, primitive): 25 solar_system_ids = [ entry.sequential for entry in payload.solarsystems ] 26 self._restricted_systems_notice_callback(solar_system_ids) 27 28 def subscribe_to_activated_lock_notice(self, callback): 29 self._activated_notice_callback = callback 30 self.public_gateway.subscribe_to_notice(ActivatedNotice, self._on_activated_notice) 31 32 def _on_activated_notice(self, payload, primitive): 33 lock_details = LockDetails(payload.solarsystem.sequential, payload.gate.sequential, payload.expiry.ToDatetime()) 34 self._activated_notice_callback(lock_details) 35 36 def subscribe_to_deactivated_lock_notice(self, callback): 37 self._deactivated_notice_callback = callback 38 self.public_gateway.subscribe_to_notice(DeactivatedNotice, self._on_deactivated_notice) 39 40 def _on_deactivated_notice(self, payload, primitive): 41 lock_details = LockDetails(payload.solarsystem.sequential, payload.gate.sequential, datetime.now()) 42 self._deactivated_notice_callback(lock_details) 43 44 def get_restricted_systems_request(self): 45 request = GetRestrictedSystemsRequest() 46 try: 47 logger.info('Emanation Lock - get_restricted_systems_request:\nRequest: {request}'.format(request=request)) 48 request_primitive, response_channel = self.public_gateway.send_character_request(request, GetRestrictedSystemsResponse, TIMEOUT) 49 response_primitive, payload = response_channel.receive() 50 logger.info('Emanation Lock - get_restricted_systems_request returned: {status_code} - {payload}'.format(status_code=response_primitive.status_code, payload=payload)) 51 if response_primitive.status_code == httplib.NOT_FOUND: 52 return [] 53 solar_systems = [ entry.sequential for entry in payload.solarsystems ] 54 return solar_systems 55 except TimeoutException: 56 logger.error('Emanation Lock - get_restricted_systems_request timed out {request}'.format(request=request)) 57 return [] 58 except Exception as exception: 59 logger.error('Emanation Lock - Error in get_restricted_systems_request {request} - {exception}'.format(request=request, exception=exception)) 60 return [] 61 62 def get_request(self): 63 request = GetRequest() 64 try: 65 logger.info('Emanation Lock - get_request:\nRequest: {request}'.format(request=request)) 66 request_primitive, response_channel = self.public_gateway.send_character_request(request, GetResponse, TIMEOUT) 67 response_primitive, payload = response_channel.receive() 68 logger.info('Emanation Lock - get_request returned: {status_code} - {payload}'.format(status_code=response_primitive.status_code, payload=payload)) 69 if response_primitive.status_code == httplib.NOT_FOUND: 70 return None 71 return LockDetails(session.solarsystemid2, payload.gate.sequential, payload.expiry.ToDatetime()) 72 except TimeoutException: 73 logger.error('Emanation Lock - get_request timed out {request}'.format(request=request)) 74 return None 75 except Exception as exception: 76 logger.error('Emanation Lock - Error in get_request {request} - {exception}'.format(request=request, exception=exception)) 77 return None