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

vgsService.py (6077B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\environment\vgsService.py
      2 import logging
      3 from carbon.client.script.environment.AudioUtil import PlaySound
      4 from carbon.common.script.sys.service import Service
      5 from carbonui.uicore import uicore
      6 from eve.client.script.ui.view.aurumstore.vgsUiController import VgsUiController
      7 from eve.client.script.ui.view.viewStateConst import ViewState
      8 from eve.common.lib.vgsConst import CATEGORYTAG_GAMETIME
      9 from eveexceptions import UserError
     10 from globalConfig import GetFakeVgsEnabled
     11 import locks
     12 from localization import GetByLabel
     13 from plex.client.api.signal import on_balance_changed
     14 from vgs.client.store import Store
     15 from vgs.client.vgsClient import VgsClient
     16 log = logging.getLogger(__name__)
     17 
     18 class VgsService(Service):
     19     __guid__ = 'svc.vgsService'
     20     __servicename__ = 'vgsSvc'
     21     __displayName__ = 'Vgs Service'
     22     __startupdependencies__ = ['neocom',
     23      'redeem',
     24      'viewState',
     25      'machoNet']
     26     __notifyevents__ = ['OnRedeemingTokensUpdated',
     27      'OnSessionChanged',
     28      'OnSessionReset',
     29      'OnUIScalingChange',
     30      'OnGlobalConfigChanged']
     31 
     32     def __init__(self):
     33         super(VgsService, self).__init__()
     34         self.vgsClient = None
     35         self.store = None
     36         self.uiController = None
     37         self.isTestingEnabled = None
     38 
     39     def Run(self, memStream = None):
     40         self.LogInfo('Starting Vgs Service')
     41         self.Initialize()
     42         self.isTestingEnabled = GetFakeVgsEnabled(self.machoNet)
     43         on_balance_changed.connect(self._on_balance_changed)
     44 
     45     def Stop(self, memStream = None):
     46         on_balance_changed.disconnect(self._on_balance_changed)
     47         super(VgsService, self).Stop(memStream)
     48 
     49     def Initialize(self):
     50         self.vgsClient = VgsClient()
     51         self.store = Store(self.vgsClient, lockImpl=locks.Lock)
     52         self.uiController = VgsUiController(self, self.viewState)
     53 
     54     def ClearCache(self):
     55         self.store.ClearCache()
     56 
     57     def Reset(self):
     58         self.ClearCache()
     59         self.vgsClient = None
     60         self.store = None
     61         self.uiController.Close()
     62         self.uiController = None
     63 
     64     def UpdateMockingSettings(self):
     65         oldIsTestingEnabled = self.isTestingEnabled
     66         self.isTestingEnabled = GetFakeVgsEnabled(self.machoNet)
     67         if oldIsTestingEnabled != self.isTestingEnabled:
     68             self.Reset()
     69             self.Initialize()
     70             self.CloseView(reason='Connection settings change detected - closing store to avoid UI errors')
     71 
     72     def OnUIScalingChange(self, *args):
     73         self.CloseView(reason='VgsService.OnUIScalingChange - closing store to avoid UI errors')
     74 
     75     def OnGlobalConfigChanged(self, *args, **kwargs):
     76         self.UpdateMockingSettings()
     77 
     78     def _on_balance_changed(self, balance, delta):
     79         if delta > 0:
     80             PlaySound('ui_plex_in001_play')
     81         elif delta < 0:
     82             PlaySound('ui_plex_out001_play')
     83         self.neocom.Blink('aurumStore', GetByLabel('UI/Neocom/Blink/PLEXBalanceChanged'))
     84 
     85     def OnRedeemingTokensUpdated(self):
     86         self.store.GetAccount().OnRedeemingTokensUpdated()
     87 
     88     def GetStore(self):
     89         return self.store
     90 
     91     def GetUiController(self):
     92         return self.uiController
     93 
     94     def CloseView(self, reason = None):
     95         if self.viewState.IsViewActive(ViewState.VirtualGoodsStore):
     96             if reason:
     97                 self.LogInfo(reason)
     98             self.viewState.CloseSecondaryView(ViewState.VirtualGoodsStore)
     99 
    100     def OnSessionChanged(self, isRemote, session, change):
    101         if 'charid' in change and change['charid'][1] is not None and self.vgsClient is None:
    102             self.Initialize()
    103         isLocationChange = 'locationid' in change
    104         isUserChange = 'userid' in change
    105         if isLocationChange or isUserChange:
    106             reason = ''
    107             if isLocationChange and isUserChange:
    108                 reason = 'VgsService.OnSessionChanged - locationid and userid change detected, closing store'
    109             elif isLocationChange:
    110                 reason = 'VgsService.OnSessionChanged - locationid change detected, closing store'
    111             elif isUserChange:
    112                 reason = 'VgsService.OnSessionChanged - userid change detected, closing store'
    113             self.LogInfo(reason)
    114             self.CloseView(reason)
    115 
    116     def OnSessionReset(self):
    117         self.Reset()
    118         self.Initialize()
    119 
    120     def ShowRedeemUI(self):
    121         if session.charid:
    122             self.redeem.OpenRedeemWindow()
    123         if self.viewState.IsViewActive(ViewState.VirtualGoodsStore):
    124             self.uiController.CloseOffer()
    125             self.viewState.CloseSecondaryView(ViewState.VirtualGoodsStore)
    126         if session.charid is None:
    127             uicore.layer.charsel.EnterRedeemMode(animate=True)
    128 
    129     def ShowOffer(self, offerId, categoryId = None):
    130         self.GetUiController().ShowOffer(offerId, categoryId)
    131 
    132     def SetFeaturedOffers(self, offerIDs = None):
    133         self.GetUiController().SetFeaturedOffers(offerIDs)
    134 
    135     def GetFeaturedOffers(self):
    136         return self.GetUiController().GetFeaturedOffers()
    137 
    138     def ToggleStore(self, categoryId = None):
    139         self._CheckIsUndocking()
    140         self.viewState.ToggleSecondaryView(ViewState.VirtualGoodsStore, categoryId=categoryId)
    141 
    142     def OpenStore(self, categoryTag = None, typeIds = None):
    143         self._CheckIsUndocking()
    144         if not self.viewState.IsViewActive(ViewState.VirtualGoodsStore):
    145             self.viewState.ActivateView(ViewState.VirtualGoodsStore, categoryTag=categoryTag, typeIds=typeIds)
    146         elif categoryTag:
    147             view = self.viewState.GetView(ViewState.VirtualGoodsStore)
    148             view.SelectCategoryByCategoryTag(categoryTag)
    149 
    150     def IsFastCheckoutWindowActive(self):
    151         return self.GetUiController().IsFastCheckoutWindowActive()
    152 
    153     def ShowBuyOmegaInStore(self):
    154         self.OpenStore(categoryTag=CATEGORYTAG_GAMETIME)
    155 
    156     def _CheckIsUndocking(self):
    157         if sm.GetService('undocking').IsExiting():
    158             raise UserError('StoreNotAvailableWhileUndocking')