def __handleNewGame(self, data, msgID, client): ''' Create a new game and respond with success or failure. data (PyDatagramIterator): the list of data sent with this datagram msgID (Int): the message ID client (Connection): the connection that tendNehis datagram came from''' # Unpack message data gameName = data.getString() mapID = data.getString() numPlayers = data.getUint32() # If we do not have the map for the requested game tell client print("id=%s"%mapID) if(not self._mapStore.isAvailable(id=mapID)): response = 0 else: # Create the game newGame = GameStateServer(gameName, numPlayers, mapID) if newGame is not None: self.games.append(newGame) response = newGame.id else: response = -1 # Send response pkg = NetDatagram() pkg.addUint16(MSG_NEWGAME_RES) pkg.addInt32(response) self._cWriter.send(pkg, client) self._console.printNotice('%s: Request for new game: %s, %s, %d.' %(client.getAddress().getIpString(),gameName,mapID,numPlayers))
def __handleGameList(self, data, msgID, client): ''' Assemble a list of active games and send it to the requesting client. data (PyDatagramIterator): the list of data sent with this datagram msgID (Int): the message ID client (Connection): the connection that this datagram came from''' # Send response pkg = NetDatagram() pkg.addUint16(MSG_GAMELIST_RES) if (len(self.games) == 0): pkg.addString('EOT') # Nothing to transmit else: pkg.addString('SOT') # Start Of Transmission for i,g in enumerate(self.games): pkg.addInt32(g.id) pkg.addString(g.name) pkg.addUint32(g.numPlayers) pkg.addString(g.map.name) pkg.addString(g.mapFile) pkg.addUint32(g.startTime) pkg.addUint32(g.turnNumber) if i < len(self.games)-1: pkg.addString('T') # Still tranmitting pkg.addString('EOT') # End Of Transmission self._cWriter.send(pkg, client) self._console.printNotice('%s: Request for game list.' %(client.getAddress().getIpString()))