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

messenger.py (9045B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\services\insurgency\messenger.py
      2 from carbon.common.script.util.mathCommon import FloatCloseEnough
      3 from eveProto.generated.eve_public.pirate.corruption.api.notices_pb2 import IncreasedNotice as CorruptionIncreasedNotice, SetNotice as CorruptionSetNotice, ResetNotice as CorruptionResetNotice
      4 from eveProto.generated.eve_public.pirate.suppression.api.notices_pb2 import IncreasedNotice as SuppressionIncreasedNotice, SetNotice as SuppressionSetNotice, ResetNotice as SuppressionResetNotice
      5 from eveProto.generated.eve_public.pirate.corruption.api.requests_pb2 import GetSystemInfoRequest as GetSystemCorruptionRequest, GetSystemInfoResponse as GetSystemCorruptionResponse, GetStageThresholdsRequest as GetStageThresholdsCorruptionRequest, GetStageThresholdsResponse as GetStageThresholdsCorruptionResponse
      6 from eveProto.generated.eve_public.pirate.suppression.api.requests_pb2 import GetSystemInfoRequest as GetSystemSuppressionRequest, GetSystemInfoResponse as GetSystemSuppressionResponse, GetStageThresholdsRequest as GetStageThresholdsSuppressionRequest, GetStageThresholdsResponse as GetStageThresholdsSuppressionResponse
      7 from eveProto.generated.eve_public.solarsystem.solarsystem_pb2 import Identifier as SolarSystemId
      8 from publicGateway.grpc.exceptions import GenericException
      9 TIMEOUT_SECONDS = 10
     10 
     11 class InsurgencyMessenger(object):
     12 
     13     def __init__(self, public_gateway):
     14         self.public_gateway = public_gateway
     15 
     16     def GetCorruption(self, systemID):
     17         return self._BlockingRequestSystemCorruption(systemID)
     18 
     19     def GetSuppression(self, systemID):
     20         return self._BlockingRequestSystemSuppression(systemID)
     21 
     22     def GetCorruptionStages(self):
     23         return self._BlockingRequestStageThreasholds(GetStageThresholdsCorruptionRequest, GetStageThresholdsCorruptionResponse)
     24 
     25     def GetSuppressionStages(self):
     26         return self._BlockingRequestStageThreasholds(GetStageThresholdsSuppressionRequest, GetStageThresholdsSuppressionResponse)
     27 
     28     def _BlockingRequestStageThreasholds(self, requestClass, responseClass):
     29         request = requestClass()
     30         request_wrapper, response_wrapper, response_payload = self._BlockingRequest(request, responseClass)
     31         if response_wrapper.status_code != 200:
     32             raise GenericException(request_primitive=request_wrapper, response_primitive=response_wrapper)
     33         stages = []
     34         for fraction in response_payload.thresholds:
     35             stages.append(float(fraction.numerator) / float(fraction.denominator))
     36 
     37         return stages
     38 
     39     def _BlockingRequestSystemCorruption(self, systemID):
     40         request = GetSystemCorruptionRequest(system=SolarSystemId(sequential=systemID))
     41         request_wrapper, response_wrapper, response_payload = self._BlockingRequest(request, GetSystemCorruptionResponse)
     42         if response_wrapper.status_code != 200:
     43             raise GenericException(request_primitive=request_wrapper, response_primitive=response_wrapper)
     44         numerator = response_payload.total_progress.numerator
     45         denominator = response_payload.total_progress.denominator
     46         stage = response_payload.stage
     47         vanguard_numerator = response_payload.vanguard_contribution.numerator
     48         vanguard_denominator = response_payload.vanguard_contribution.denominator
     49         result = SystemData(systemID, numerator, denominator, stage, vanguard_numerator, vanguard_denominator)
     50         return result
     51 
     52     def _BlockingRequestSystemSuppression(self, systemID):
     53         request = GetSystemSuppressionRequest(system=SolarSystemId(sequential=systemID))
     54         request_wrapper, response_wrapper, response_payload = self._BlockingRequest(request, GetSystemSuppressionResponse)
     55         if response_wrapper.status_code != 200:
     56             raise GenericException(request_primitive=request_wrapper, response_primitive=response_wrapper)
     57         numerator = response_payload.total_progress.numerator
     58         denominator = response_payload.total_progress.denominator
     59         stage = response_payload.stage
     60         vanguard_numerator = response_payload.vanguard_contribution.numerator
     61         vanguard_denominator = response_payload.vanguard_contribution.denominator
     62         result = SystemData(systemID, numerator, denominator, stage, vanguard_numerator, vanguard_denominator)
     63         return result
     64 
     65     def _BlockingRequest(self, request, response_class):
     66         request_primitive, response_channel = self.public_gateway.send_character_request(request, response_class, TIMEOUT_SECONDS)
     67         response_primitive, payload = response_channel.receive()
     68         return (request_primitive, response_primitive, payload)
     69 
     70     def get_corruption_stage_thresholds(self):
     71         stages = self._BlockingRequestStageThreasholds(GetStageThresholdsCorruptionRequest, GetStageThresholdsCorruptionResponse)
     72         return stages
     73 
     74     def _GetSuppressionIncreasedCallback(self, originalCallback):
     75 
     76         def f(notice, _primative):
     77             systemID = notice.system.sequential
     78             data = NoticeData(notice.new_suppression.numerator, notice.new_suppression.denominator, vanguardInstigated=notice.vanguard)
     79             originalCallback(systemID, data)
     80 
     81         return f
     82 
     83     def _GetCorruptionIncreasedCallback(self, originalCallback):
     84 
     85         def f(notice, _primative):
     86             systemID = notice.system.sequential
     87             data = NoticeData(notice.new_corruption.numerator, notice.new_corruption.denominator, vanguardInstigated=notice.vanguard)
     88             originalCallback(systemID, data)
     89 
     90         return f
     91 
     92     def _GetSetCallback(self, originalCallback):
     93 
     94         def f(notice, _primative):
     95             systemID = notice.system.sequential
     96             data = NoticeData(notice.progress.numerator, notice.progress.denominator, False)
     97             originalCallback(systemID, data)
     98 
     99         return f
    100 
    101     def _GetResetCallback(self, originalCallback):
    102 
    103         def f(notice, _primative):
    104             systemID = notice.system.sequential
    105             data = NoticeData(notice.progress.numerator, notice.progress.denominator, False)
    106             originalCallback(systemID, data)
    107 
    108         return f
    109 
    110     def SubscribeToSuppressionValueUpdates(self, callback):
    111         increasedCallback = self._GetSuppressionIncreasedCallback(callback)
    112         setCallback = self._GetSetCallback(callback)
    113         resetCallback = self._GetResetCallback(callback)
    114         self.public_gateway.subscribe_to_notice(SuppressionIncreasedNotice, increasedCallback)
    115         self.public_gateway.subscribe_to_notice(SuppressionSetNotice, setCallback)
    116         self.public_gateway.subscribe_to_notice(SuppressionResetNotice, resetCallback)
    117 
    118     def SubscribeToCorruptionValueUpdates(self, callback):
    119         increasedCallback = self._GetCorruptionIncreasedCallback(callback)
    120         setCallback = self._GetSetCallback(callback)
    121         resetCallback = self._GetResetCallback(callback)
    122         self.public_gateway.subscribe_to_notice(CorruptionIncreasedNotice, increasedCallback)
    123         self.public_gateway.subscribe_to_notice(CorruptionSetNotice, setCallback)
    124         self.public_gateway.subscribe_to_notice(CorruptionResetNotice, resetCallback)
    125 
    126 
    127 class NoticeData(object):
    128 
    129     def __init__(self, newNumerator, newDenominator, vanguardInstigated = False):
    130         self._vanguardInstigated = vanguardInstigated
    131         self._newDenominator = newDenominator
    132         self._newNumerator = newNumerator
    133 
    134     def __eq__(self, other):
    135         if not isinstance(other, self.__class__):
    136             return False
    137         return other.newDenominator == self.newDenominator and other.newNumerator == self.newNumerator and other.vanguardInstigated == self.vanguardInstigated
    138 
    139     def __ne__(self, other):
    140         return not self.__eq__(other)
    141 
    142     @property
    143     def vanguardInstigated(self):
    144         return self._vanguardInstigated
    145 
    146     @property
    147     def newDenominator(self):
    148         return self._newDenominator
    149 
    150     @property
    151     def newNumerator(self):
    152         return self._newNumerator
    153 
    154 
    155 class SystemData(object):
    156 
    157     def __init__(self, systemID, numerator, denominator, stage, vanguard_numerator, vanguard_denominator):
    158         self.systemID = systemID
    159         self.vanguardDenominator = vanguard_denominator
    160         self.vanguardNumerator = vanguard_numerator
    161         self.stage = stage
    162         self.denominator = denominator
    163         self.numerator = numerator
    164 
    165     def __eq__(self, other):
    166         if not isinstance(other, self.__class__):
    167             return False
    168         return other.systemID == self.systemID and other.numerator == self.numerator and other.denominator == self.denominator and other.stage == self.stage and other.vanguardNumerator == self.vanguardNumerator and other.vanguardDenominator == self.vanguardDenominator
    169 
    170     def __ne__(self, other):
    171         return not self.__eq__(other)
    172 
    173     @property
    174     def totalProportion(self):
    175         if FloatCloseEnough(float(self.denominator), 0.0):
    176             return 0.0
    177         return float(self.numerator) / float(self.denominator)