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)