jumpQueue.py (4761B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\services\jumpQueue.py 2 import sys 3 import blue 4 import localization 5 import log 6 import uthread 7 import utillib 8 from ballparkCommon.jumpdelay import GetStargateJumpDelayBlueTime 9 from carbon.common.script.sys.service import Service 10 from carbon.common.script.sys.serviceConst import ROLE_SERVICE, SERVICE_RUNNING 11 from eve.common.lib import appConst as const 12 13 class JumpQueue(Service): 14 __guid__ = 'svc.jumpQueue' 15 __exportedcalls__ = {'IsJumpQueued': [ROLE_SERVICE]} 16 __dependencies__ = ['machoNet'] 17 __notifyevents__ = ['OnJumpQueueUpdate', 'DoSessionChanging'] 18 19 def Run(self, ms): 20 Service.Run(self, ms) 21 self.jumpQueue = None 22 self.queueCharID = None 23 uthread.worker('jumpQueue::Timer', self.__Timer) 24 25 def PrepareQueueForCharID(self, charID): 26 self.jumpQueue = None 27 self.queueCharID = charID 28 29 def GetPreparedQueueCharID(self): 30 return self.queueCharID 31 32 def DoSessionChanging(self, isRemote, session, change): 33 if 'solarsystemid2' in change: 34 self.LogInfo('Jump Queue: DoSessionChanging is cleaning jump queue info') 35 self.jumpQueue = None 36 37 def __Timer(self): 38 while self.state == SERVICE_RUNNING: 39 if self.jumpQueue is None: 40 blue.pyos.synchro.SleepWallclock(500) 41 else: 42 try: 43 if self._ShouldShowNotification(): 44 if session.solarsystemid2 and session.solarsystemid2 == self.jumpQueue.solarsystemID: 45 self.jumpQueue = None 46 elif self.queueCharID in self.jumpQueue.jumpKeys: 47 expires = self.jumpQueue.jumpKeys[self.queueCharID] + const.SEC * self.jumpQueue.keyLife 48 if blue.os.GetWallclockTime() > expires: 49 sm.ScatterEvent('OnJumpQueueMessage', localization.GetByLabel('UI/JumpQueue/KeyExpired', system=self.jumpQueue.solarsystemID), False) 50 self.jumpQueue = None 51 else: 52 sm.ScatterEvent('OnJumpQueueMessage', localization.GetByLabel('UI/JumpQueue/KeyIssued', system=self.jumpQueue.solarsystemID, expiration=expires - blue.os.GetWallclockTime()), True) 53 else: 54 try: 55 idx = 1 + self.jumpQueue.queue.index(self.queueCharID) 56 position = max(1, idx - self.jumpQueue.space) 57 sm.ScatterEvent('OnJumpQueueMessage', localization.GetByLabel('UI/JumpQueue/Waiting', system=self.jumpQueue.solarsystemID, pos=position), False) 58 except ValueError: 59 sys.exc_clear() 60 61 except: 62 log.LogException() 63 sys.exc_clear() 64 65 blue.pyos.synchro.SleepWallclock(4500) 66 67 def _ShouldShowNotification(self): 68 if self.jumpQueue is None or not session.IsItSafe(): 69 return False 70 if session.nextSessionChange is None or session.solarsystemid2 is None: 71 return True 72 startNotificationsTime = session.nextSessionChange + GetStargateJumpDelayBlueTime(self.jumpQueue.solarsystemID) - 5 * const.SEC 73 return blue.os.GetSimTime() > startNotificationsTime 74 75 def IsJumpQueued(self): 76 if self.jumpQueue is None: 77 return False 78 if self.queueCharID in self.jumpQueue.jumpKeys: 79 if blue.os.GetWallclockTime() - self.jumpQueue.jumpKeys[self.queueCharID] < const.SEC * self.jumpQueue.keyLife: 80 self.jumpQueue = None 81 else: 82 return False 83 self.LogInfo('Jump Queued, queue=', self.jumpQueue) 84 return True 85 86 def OnJumpQueueUpdate(self, solarsystemID, space, queue, jumpKeys, keyLife): 87 if self.jumpQueue is None: 88 self.LogInfo('Jump Queue: Entering Queue for ', solarsystemID, ', space=', space, ', queue=', queue) 89 self.jumpQueue = utillib.KeyVal(solarsystemID=solarsystemID, space=space, queue=queue, jumpKeys=jumpKeys, keyLife=keyLife) 90 elif self.queueCharID in queue: 91 self.LogInfo('Jump Queue: Queue update for ', solarsystemID, ', space=', space, ', queue=', queue, ', keys=', jumpKeys) 92 self.jumpQueue.space = space 93 self.jumpQueue.queue = queue 94 self.jumpQueue.jumpKeys = jumpKeys 95 self.jumpQueue.keyLife = keyLife 96 else: 97 self.LogInfo('Jump Queue: ', self.queueCharID, ' is leaving queue for ', solarsystemID) 98 self.jumpQueue = None