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

repository.py (4874B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\communitytracks\client\repository.py
      2 from clientsettings.qa.setting import BaseQASetting
      3 from communitytracks.client.api.signal import on_community_track_completed
      4 from communitytracks.client.data.instance_attributes import InstanceAttributes
      5 from communitytracks.client.data.instance_identifier import InstanceIdentifier
      6 from communitytracks.client.data.definition_identifier import DefinitionIdentifier
      7 from communitytracks.client.listener.listener_signals import on_completed_notice
      8 from communitytracks.client.listener.notice_listener import CommunityTracksNoticeListener
      9 from communitytracks.client.mock.mock_gateway import MockCommunityTracksGateway
     10 from communitytracks.common.const import LOGGER_NAME
     11 from communitytracks.common.data.definition_attributes import DefinitionAttributes, get_definitions_raw_data
     12 from eve.common.script.util.notificationconst import notificationTypeVanguardNemesisConvoyStarted
     13 from publicGateway.gateway import PublicGateway
     14 from communitytracks.client.messenger.request_messenger import CommunityTracksRequestMessenger
     15 from logging import getLogger
     16 if False:
     17     from typing import Dict
     18 logger = getLogger(LOGGER_NAME)
     19 
     20 class CommunityTracksRepository(object):
     21 
     22     def __init__(self, public_gateway, service_manager, enable_mocks_setting):
     23         self._service_manager = service_manager
     24         self._public_gateway = public_gateway
     25         self._enable_mocks_setting = enable_mocks_setting
     26         self._request_messenger = None
     27         self._notice_listener = CommunityTracksNoticeListener(self._public_gateway)
     28         self._instances_cache = {}
     29         self._definitions_cache = None
     30         logger.info('Community Tracks repository initialized')
     31         self._connect_signals()
     32 
     33     def __del__(self):
     34         self._disconnect_signals()
     35 
     36     def _clear_cache(self):
     37         self._instances_cache = {}
     38         self._definitions_cache = None
     39 
     40     def _connect_signals(self):
     41         self._enable_mocks_setting.register_to_updates(self._on_mocking_enabled_changed)
     42         on_completed_notice.connect(self._on_completed_notice)
     43 
     44     def _disconnect_signals(self):
     45         self._enable_mocks_setting.unregister_from_updates(self._on_mocking_enabled_changed)
     46         on_completed_notice.disconnect(self._on_completed_notice)
     47 
     48     @property
     49     def request_messenger(self):
     50         if self._request_messenger is None:
     51             self._request_messenger = CommunityTracksRequestMessenger(self._public_gateway)
     52             self._update_gateway()
     53         return self._request_messenger
     54 
     55     def _update_gateway(self):
     56         if self._enable_mocks_setting.is_enabled():
     57             gateway = MockCommunityTracksGateway()
     58         else:
     59             gateway = self._public_gateway
     60         self.request_messenger.public_gateway = gateway
     61         self._notice_listener.public_gateway = gateway
     62 
     63     def _on_mocking_enabled_changed(self, *args):
     64         self._clear_cache()
     65         self._update_gateway()
     66 
     67     def get_definition_attributes(self, definition_id):
     68         self._cache_definitions()
     69         return self._definitions_cache.get(definition_id, None)
     70 
     71     def get_instance_attributes(self, instance_id, force_refresh = False):
     72         if instance_id not in self._instances_cache or force_refresh:
     73             def_id, progress = self._service_manager.RemoteSvc('communityTrackMgr').get_instance_attributes_public(instance_id.sequential)
     74             if def_id is not None and progress is not None:
     75                 instance_attributes = InstanceAttributes(definition_identifier=DefinitionIdentifier(fsd_identifier=def_id), progress=progress)
     76                 if self._enable_mocks_setting.is_enabled():
     77                     return instance_attributes
     78                 if instance_attributes:
     79                     self._instances_cache[instance_id] = instance_attributes
     80             else:
     81                 logger.error('could not find instance attributes for id %s' % instance_id)
     82         return self._instances_cache.get(instance_id, None)
     83 
     84     def _cache_definitions(self):
     85         if self._definitions_cache is not None:
     86             return
     87         info_log = 'Caching definitions...\n'
     88         self._definitions_cache = {}
     89         for key, val in get_definitions_raw_data().items():
     90             identifier = DefinitionIdentifier(key)
     91             attributes = DefinitionAttributes(val.goal, [ t for t in val.tale_templates ])
     92             info_log += 'Id: %s\nAttributes: %s\n' % (identifier, attributes)
     93             self._definitions_cache[identifier] = attributes
     94 
     95         info_log += 'Done!'
     96         logger.info(info_log)
     97 
     98     def _on_completed_notice(self, instance_id):
     99         on_community_track_completed(instance_id)
    100         sm.GetService('notificationSvc').MakeAndScatterNotification(type=notificationTypeVanguardNemesisConvoyStarted, data=None)