class PlayerHandler( webapp.RequestHandler ): def __init__( self ): webapp.RequestHandler.__init__( self ) self.log = getLogger() self.dao = DAO() self.config = ConfigObj("Config/skajserver.cfg") def createPlayerHandler(self, url): """ create player based on user that is logged in. """ response = "sorry... operation failed" data = "<player>FAILED</player>" try: self.log.debug("PlayerHandler:createPlayerHandler") user_name = self.request.get("user_name") token = self.request.get("token") # need to know which game we're joining. game_name = self.request.get("game_name") if self.dao.authenticateUser( user_name, token ): # check if user has already joined the game. ( stat, player ) = self.dao.getPlayerForGame( user_name, game_name ) if stat == StatusCodes.PLAYER_NOT_IN_GAME: self.log.debug("player does not exist in game") ( user_status, user) = self.dao.getUser( user_name ) if user_status == StatusCodes.SUCCESSFUL: self.log.debug("have user successfully") # get the game. ( game_stat, game) = self.dao.getGame( game_name ) self.log.debug("game name is " + game.game_name) # create the player. player = self.dao.createPlayer( user, game ) data = "<player id=%s game_name=%s></user>"%( user_name, game_name ) else: self.log.debug("player already in game") data = "<player id=%s game_name=%s></user>"%( user_name, game_name ) except: self.log.error("PlayerHandler:createPlayerHandler ex " + traceback.format_exc() ) self.response.out.write( data ) def getPlayerHandlerForGame( self, url): """ Retrieve User. NO SECURITY YET..... MARKS the user as logged in (on the server?) """ response = "sorry... operation failed" data = "<player>FAILED</player>" try: self.log.debug("PlayerHandler:getPlayerHandlerForGame") user_name = self.request.get("user_name") token = self.request.get("token") game_name = self.request.get("game_name") (stat, player ) = self.dao.getPlayerForGame( user_name, game_name ) if stat == StatusCodes.SUCCESSFUL: self.log.debug("SUCCESSFULLY RETRIEVED PLAYER " + user_name ) data = "<player id=%s game_name=%s></user>"%( user_name, game_name ) except: self.log.error("PlayerHandler:getPlayerHandlerForGame ex " + traceback.format_exc() ) self.response.out.write( data ) def get(self, url): """ handle various User based gets """ self.log.debug("URL is " + url) path = self.request.path self.log.debug("path is " + path) # dict string --> method. # FIXME if path == "/1/createplayer": self.createPlayerHandler( url ) else: if path == "/1/getplayer": self.getPlayerHandlerForGame( url )
class GameHandler( webapp.RequestHandler ): def __init__( self ): webapp.RequestHandler.__init__( self ) self.log = getLogger() self.dao = DAO() self.config = ConfigObj("Config/skajserver.cfg") def handleCreateGame(self, url): """ Create a game... .. DUH NO SECURITY YET..... """ response = "sorry... operation failed" data = "<game>FAILED</game>" try: self.log.debug("GameHandler:handleCreateGame start") name = self.request.get("name") password = self.request.get("password") num_players = int( self.request.get("num_players") ) map_name = self.request.get("map_name", "default") (stat, game) = self.dao.createGame( name, password, num_players, map_name ) if stat == StatusCodes.SUCCESSFUL: self.log.debug("SUCCESSFULLY CREATED GAME " + name ) data = "<game name=%s></game>"%( name ) except: self.log.error("GameHandler:handleCreateGame ex " + traceback.format_exc() ) self.response.out.write( data ) def handleModifyGameState(self, url): """ Create a game... .. DUH NO SECURITY YET..... """ response = "sorry... operation failed" data = "<game>FAILED</game>" try: self.log.debug("GameHandler:handleModifyGameState start") name = self.request.get("name") state = self.request.get("state") (stat, game) = self.dao.modifyGameState( name, state ) if stat == StatusCodes.SUCCESSFUL: self.log.debug("SUCCESSFULLY MODIFIED STATE GAME " + name ) data = "<game name=%s></game>"%( name ) except: self.log.error("GameHandler:handleModifyGameState ex " + traceback.format_exc() ) self.response.out.write( data ) # will eventually go into a proper object for this. def populateGame( self, game ): """ Assigns countries to players and does initial populating of armies. """ # get list of countries for map name game_name = game.game_name (game_status, countries_list) = self.dao.getMasterCountries( game.map_name ) # randomize list. random.shuffle( countries_list ) # get players. (players_status, players_list) = self.dao.getAllPlayersForGame( game.game_name ) # assign equals num of countries to players starting_armies = int( self.config["starting_armies"] ) starting_countries = int( self.config["starting_countries"] ) # need to check if enough countries. if len( players_list) * starting_countries > countries_list: self.log.error("NOT ENOUGH COUNTRIES FOR NUMBER OF PLAYERS") else: for player in players_list: for i in xrange( starting_countries ): country_name = countries_list.pop() self.dao.createCountryForPlayer( game_name, player.user_name, country_name, starting_armies ) def handleStartGame(self, url): """ Create a game... .. DUH NO SECURITY YET..... """ response = "sorry... operation failed" data = "<game>FAILED</game>" try: self.log.debug("GameHandler:handleStartGame start") name = self.request.get("name") (stat, game) = self.dao.modifyGameState( name, "STARTED" ) if stat == StatusCodes.SUCCESSFUL: self.log.debug("SUCCESSFULLY MODIFIED STATE GAME " + name ) # populate game with countries. self.populateGame( game ) data = "<game name=%s>%s</game>"%( name, "STARTED" ) except: self.log.error("GameHandler:handleStartGame ex " + traceback.format_exc() ) self.response.out.write( data ) def handleJoinGame(self, url): """ Join a game... .. DUH NO SECURITY YET..... 1) Get username 2) get token 3) authenticate 4) get game 5) create player for game """ response = "sorry... operation failed" data = "<game>FAILED</game>" try: self.log.debug("GameHandler:handleJoinGame start") user_name = self.request.get("username") token = self.request.get("token") state = self.request.get("state") game_name = self.request.get("gamename") ( stat, user ) = self.dao.authenticateUser( user_name, token ) if stat == StatusCodes.SUCCESSFUL: (game_status, game) = self.dao.getGame( game_name ) if game_status == StatusCodes.SUCCESSFUL and game != None: # check if user has already joined the game. ( stat, player ) = self.dao.getPlayerForGame( user_name, game ) if stat != StatusCodes.PLAYER_NOT_IN_GAME: # create the player. ( player_status, player) = self.dao.createPlayer( user, game ) if player_status == StatusCodes.SUCCESSFUL: data = "<game>JOINED</game>" except: self.log.error("GameHandler:handleJoinGame ex " + traceback.format_exc() ) self.response.out.write( data ) def get(self, url): """ handle various User based gets """ self.log.debug("URL is " + url) path = self.request.path self.log.debug("path is " + path) # dict string --> method. # FIXME if path == "/1/creategame": self.handleCreateGame( url ) else: if path == "/1/modifygamestate": self.handleModifyGameState( url ) else: if path == "/1/joingame": self.handleJoinGame( url ) else: if path == "/1/startgame": self.handleStartGame( url ) else: if path == "/foo": self.dao.generateCountryMaster()
class ActionHandler( webapp.RequestHandler ): def __init__( self ): webapp.RequestHandler.__init__( self ) self.log = getLogger() self.dao = DAO() self.config = ConfigObj("Config/skajserver.cfg") def canAttack( self, attacking_country, attacked_country ): """ Confirms if countries can attack eachother. """ # FIXME return true def attack( self, attacking_country, attacked_country ): """ Confirms if countries can attack eachother. """ # FIXME return true def handleAttack(self, url): """ Create a game... .. DUH NO SECURITY YET..... """ response = "sorry... operation failed" data = "<action>FAILED</action>" try: self.log.debug("ActionHandler:handleAttack start") name = self.request.get("name") token = self.request.get("token") if self.dao.authenticateUser( name, token): # get country doing the attacking attacking_country = self.request.get("attacking_name") # get country being attacked. attacked_country = self.request.get("attacked_name") # confirm they're near eachother. if self.canAttack( attacking_country, attacked_country ): # attack self.attack( attacking_country, attacked_country ) except: self.log.error("GameHandler:handleCreateGame ex " + traceback.format_exc() ) self.response.out.write( data ) def handlePopulate(self, url): """ Create a game... .. DUH NO SECURITY YET..... """ response = "sorry... operation failed" data = "<action>FAILED</action>" try: self.log.debug("ActionHandler:handlePopulate start") name = self.request.get("name") token = self.request.get("token") if self.dao.authenticateUser( name, token): # get country doing the attacking country_name = self.request.get("country") # get country being attacked. attacked_country = self.request.get("attacked_name") # confirm they're near eachother. if self.canAttack( attacking_country, attacked_country ): except: self.log.error("GameHandler:handlePopulate ex " + traceback.format_exc() ) self.response.out.write( data ) def get(self, url): """ handle various User based gets """ self.log.debug("URL is " + url) path = self.request.path self.log.debug("path is " + path) # dict string --> method. # FIXME if path == "/1/attack": self.handleAttack( url ) else: if path == "/1/populate": self.handleModifyGameState( url )