Пример #1
0
 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()
Пример #2
0
 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
Пример #3
0
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)