def __init__(self, settings, permClass = None, limits = None, requestHandlers = None): super(PrbDispatcher, self).__init__(interfaces.IPrbListener, requestHandlers, FUNCTIONAL_FLAG.PREBATTLE) self._settings = settings self._permClass = permClass or DefaultPrbPermissions self._limits = limits or DefaultLimits(self) self._hasEntity = False self._cooldown = prb_cooldown.PrbCooldownManager()
def __init__(self, settings, permClass = None, limits = None, requestHandlers = None): super(PrbDispatcher, self).__init__() self._settings = settings self._listeners = [] if permClass is not None: self._permClass = permClass else: self._permClass = DefaultPrbPermissions if limits is not None: self._limits = limits else: self._limits = DefaultLimits(self) if requestHandlers is not None: self._requestHandlers = requestHandlers else: self._requestHandlers = {} return
class PrbDispatcher(IPrbFunctional): def __init__(self, settings, permClass = None, limits = None, requestHandlers = None): super(PrbDispatcher, self).__init__() self._settings = settings self._listeners = [] if permClass is not None: self._permClass = permClass else: self._permClass = DefaultPrbPermissions if limits is not None: self._limits = limits else: self._limits = DefaultLimits(self) if requestHandlers is not None: self._requestHandlers = requestHandlers else: self._requestHandlers = {} return def init(self, clientPrb = None, ctx = None): if clientPrb is None: clientPrb = prb_control.getClientPrebattle() if clientPrb is not None: clientPrb.onSettingUpdated += self.prb_onSettingUpdated clientPrb.onRosterReceived += self.prb_onRosterReceived clientPrb.onTeamStatesReceived += self.prb_onTeamStatesReceived clientPrb.onPlayerStateChanged += self.prb_onPlayerStateChanged clientPrb.onPlayerRosterChanged += self.prb_onPlayerRosterChanged clientPrb.onPlayerAdded += self.prb_onPlayerAdded clientPrb.onPlayerRemoved += self.prb_onPlayerRemoved clientPrb.onKickedFromQueue += self.prb_onKickedFromQueue for listener in self._listeners: listener.onPrbFunctionalInited() else: LOG_ERROR('ClientPrebattle is not defined') return def fini(self, clientPrb = None, woEvents = False): self._settings = None self._requestHandlers.clear() if self._limits is not None: self._limits.clear() self._limits = None if not woEvents: try: for listener in self._listeners: listener.onPrbFunctionalFinished() except: LOG_CURRENT_EXCEPTION() if clientPrb is None: clientPrb = prb_control.getClientPrebattle() if clientPrb is not None: clientPrb.onSettingUpdated -= self.prb_onSettingUpdated clientPrb.onTeamStatesReceived -= self.prb_onTeamStatesReceived clientPrb.onPlayerStateChanged -= self.prb_onPlayerStateChanged clientPrb.onPlayerRosterChanged -= self.prb_onPlayerRosterChanged clientPrb.onPlayerAdded -= self.prb_onPlayerAdded clientPrb.onPlayerRemoved -= self.prb_onPlayerRemoved clientPrb.onKickedFromQueue -= self.prb_onKickedFromQueue return def isPlayerJoined(self, ctx): return ctx.getEntityType() is CTRL_ENTITY_TYPE.PREBATTLE and ctx.getID() == self.getID() def addListener(self, listener): if isinstance(listener, IPrbListener): if listener not in self._listeners: self._listeners.append(listener) else: LOG_ERROR('Listener already added', listener) else: LOG_ERROR('Object is not extend IPrbListener', listener) def removeListener(self, listener): if listener in self._listeners: self._listeners.remove(listener) else: LOG_ERROR('Listener not found', listener) def getID(self): return prb_control.getPrebattleID() def getPrbType(self): if self._settings: return self._settings['type'] return 0 def getPrbTypeName(self): return prb_control.getPrebattleTypeName(self.getPrbType()) def getSettings(self): return self._settings def getLimits(self): return self._limits def getPermissions(self, pID = None): return restrictions.createPermissions(self, pID=pID) def isCreator(self, pDatabaseID = None): return self._permClass.isCreator(self.getRoles(pDatabaseID=pDatabaseID)) def hasEntity(self): return True def hasLockedState(self): team, assigned = decodeRoster(self.getRosterKey()) return self.getTeamState().isInQueue() and self.getPlayerInfo().isReady() and assigned def isConfirmToChange(self, exit = FUNCTIONAL_EXIT.NO_FUNC): return self._settings is not None def getConfirmDialogMeta(self): message = DIALOGS.exitcurrentprebattle_custommessage(PREBATTLE_TYPE_NAMES[self.getPrbType()]) return I18nConfirmDialogMeta('exitCurrentPrebattle', meta=SimpleDialogMeta(message=message)) def prb_onSettingUpdated(self, settingName): settingValue = self._settings[settingName] LOG_DEBUG('prb_onSettingUpdated', settingName, settingValue) for listener in self._listeners: listener.onSettingUpdated(self, settingName, settingValue) def prb_onTeamStatesReceived(self): team1State = self.getTeamState(team=1) team2State = self.getTeamState(team=2) LOG_DEBUG('prb_onTeamStatesReceived', team1State, team2State) for listener in self._listeners: listener.onTeamStatesReceived(self, team1State, team2State) def prb_onPlayerStateChanged(self, pID, roster): accountInfo = self.getPlayerInfo(pID=pID) LOG_DEBUG('prb_onPlayerStateChanged', accountInfo) for listener in self._listeners: listener.onPlayerStateChanged(self, roster, accountInfo) def prb_onRosterReceived(self): LOG_DEBUG('prb_onRosterReceived') rosters = self.getRosters() for listener in self._listeners: listener.onRostersChanged(self, rosters, True) team = self.getPlayerTeam() for listener in self._listeners: listener.onPlayerTeamNumberChanged(self, team) def prb_onPlayerRosterChanged(self, pID, prevRoster, roster, actorID): LOG_DEBUG('prb_onPlayerRosterChanged', pID, prevRoster, roster, actorID) rosters = self.getRosters(keys=[prevRoster, roster]) actorInfo = self.getPlayerInfo(pID=actorID) playerInfo = self.getPlayerInfo(pID=pID) for listener in self._listeners: if actorInfo and playerInfo: listener.onPlayerRosterChanged(self, actorInfo, playerInfo) listener.onRostersChanged(self, rosters, False) if pID == account_helpers.getPlayerID(): prevTeam, _ = decodeRoster(prevRoster) currentTeam, _ = decodeRoster(roster) if currentTeam is not prevTeam: for listener in self._listeners: listener.onPlayerTeamNumberChanged(self, currentTeam) def prb_onPlayerAdded(self, pID, roster): LOG_DEBUG('prb_onPlayerAdded', pID, roster) rosters = self.getRosters(keys=[roster]) playerInfo = self.getPlayerInfo(pID=pID, rosterKey=roster) for listener in self._listeners: listener.onPlayerAdded(self, playerInfo) listener.onRostersChanged(self, rosters, False) def prb_onPlayerRemoved(self, pID, roster, name): LOG_DEBUG('prb_onPlayerRemoved', pID, roster, name) rosters = self.getRosters(keys=[roster]) playerInfo = PlayerPrbInfo(pID, name=name) for listener in self._listeners: listener.onPlayerRemoved(self, playerInfo) listener.onRostersChanged(self, rosters, False) def prb_onKickedFromQueue(self, *args): LOG_DEBUG('prb_onKickedFromQueue', args) message = messages.getPrbKickedFromQueueMessage(self.getPrbTypeName()) if len(message): SystemMessages.pushMessage(message, type=SystemMessages.SM_TYPE.Warning)