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

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