def cmd_requestai_joined(self, tag, args): if len(args) > 0: requestedAlgorithm = args[0].decode("utf-8") launchScript = None for algorithm, launcher in ai_list.X_ALGORITHMS + ai_list.DETECTIVE_ALGORITHMS: if algorithm == requestedAlgorithm: aidir = os.path.dirname(ai_list.__file__) launchScript = os.path.normpath( os.path.join(aidir, launcher)) break if launchScript != None: self.sendOk(tag) log.msg( util.printable( _("Launching AI algorithm \"%(algorithm)s\" using script \"%(script)s\"" % { "algorithm": requestedAlgorithm, "script": launchScript }))) os.spawnl(os.P_NOWAIT, sys.executable, sys.executable, launchScript, self.generateBotName(), self._game.getName()) # self.generateBotName().encode("utf-8"), self._game.getName().encode("utf-8")) else: raise IllegalCommand(self.trans.gettext("Insufficient arguments."))
def removeGame(self, game): if game.getName() in self._games: del self._games[game.getName()] log.msg( util.printable( _("Removed game \"%(gamename)s\"") % {"gamename": game.getName()}))
def cmd_login_compat(self, tag, args): if len(args) < 2: raise IllegalCommand(self.trans.gettext("Insufficient arguments.")) else: try: # GameRegistry.registry.registerUser(args[0].decode("utf-8"), args[1].decode("utf-8"), GameRegistry.registry.registerUser( args[0], args[1], self.transport.getPeer().host) # self._username = args[0].decode("utf-8") self._username = args[0] if self._username == "admin": self._state = "admin" else: self._state = "player" GameRegistry.registry.addClient(self) GameRegistry.registry.addUnjoinedUser(self._username) log.msg( util.printable( _("Player \"%(playername)s\" has signed on") % {"playername": self._username})) self.sendOk(tag) except GameRegistry.PasswordError as e: raise DeniedCommand(self.trans.gettext(e.ustr())) except GameRegistry.UserError as e: raise DeniedCommand(self.trans.gettext(e.ustr()))
def cmd_newgame_player(self, tag, args): if len(args) < 2: raise IllegalCommand(self.trans.gettext("Insufficient arguments.")) else: # name = args[0].decode("utf-8") name = args[0] if GameRegistry.registry.hasGame(name): raise DeniedCommand( self.trans.gettext("That game name is already in use.")) else: try: g = Game(name, args[1]) self.sendOk(tag) g.addPlayer(self._username) GameRegistry.registry.addGame(g) self._state = "joined" GameRegistry.registry.removeUnjoinedUser(self._username) log.msg( util.printable( _("New game \"%(gamename)s\" created by player \"%(playername)s\"" ) % { "gamename": name, "playername": self._username })) for p in GameRegistry.registry.getUnjoinedUsers(): # GameRegistry.registry.getClient(p).sendUntagged("gameinfo", g.getName().encode("utf-8"), GameRegistry.registry.getClient(p).sendUntagged( "gameinfo", g.getName(), g.getStatus(), g.getType(), str(g.getNumPlayers())) except GameError as e: raise DeniedCommand(self.trans.gettext(e.ustr()))
def removeGame(self, game): if self._games.has_key(game.getName().encode("utf-8")): del self._games[game.getName().encode("utf-8")] log.msg( util.printable( _("Removed game \"%(gamename)s\"") % {"gamename": game.getName()}))
def purgeExpiredGames(self): if self._expiration > 0: log.msg(util.printable(_("Purging expired games"))) games = self._games.values() for game in games: if (time.time() - game._startTime) / 3600 > self._expiration: self.purgeGame(game)
def purgeBotGames(self): # purge any games that have bots log.msg(util.printable(_("Purging games involving AI clients"))) games = list(self._games.values()) for game in games: for player in game.getPlayers(): if player[-5:] == '[bot]': self.purgeGame(game) break
def connectionLost(self, reason): if self._game is not None: self._game.removePlayer(self._username) # number of players in this game needs to be updated for p in GameRegistry.registry.getUnjoinedUsers(): # GameRegistry.registry.getClient(p).sendUntagged("gameinfo", self._game.getName().encode("utf-8"), GameRegistry.registry.getClient(p).sendUntagged( "gameinfo", self._game.getName(), self._game.getStatus(), self._game.getType(), str(self._game.getNumPlayers())) # kill the game if this was the last player self.testRemoveGame(self._game) if self._username is not None: GameRegistry.registry.removeClient(self) GameRegistry.registry.removeUnjoinedUser(self._username) log.msg( util.printable( _("Connection lost to player \"%(playername)s\"") % {"playername": self._username}))
def close(self): log.msg(util.printable(_("Closing game registry"))) self._games.close() self._users.close()