def __handleDownloadMap(data, msgID, client): ''' Prepare and send requested map to client 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 id = data.getUint32() resp = 0 filename = self._mapStore.getMap(id=id)['filename'] mapString = self._mapStore.loadMapAsString(filename) if (mapString == None): LOG.debug('No such map') resp = 0 mapString = '' else: LOG.debug('Sending map') resp = 1 # Send response pkg = NetDatagram() pkg.addUint16(MSG_JOINGAME_RES) pkg.addUint32(resp) pkg.addString(mapString) self._cWriter.send(pkg, client)
def __handleMapList(self, data, msgID, client): ''' Assemble a list of available maps 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''' # Assemble a list with entries in the form (filename,mapname,md5sum) mapFileList = Map.getMapFiles() responseList = [] for f in mapFileList: fh = open(Map.MAP_PATH + f,' rb') mapObj = cPickle.load(fh) responseList.append((mapObj.name, f, Map.getMapMD5(f))) # Send response pkg = NetDatagram() pkg.addUint16(MSG_MAPLIST_RES) pkg.addString('SOT') # Start Of Transmission for i, (n,f,c) in enumerate(responseList): pkg.addString(n) pkg.addString(f) pkg.addString(c) if i < len(responseList)-1: pkg.addString('T') # Still tranmitting pkg.addString('EOT') # End Of Transmission self._cWriter.send(pkg, client) self._console.printNotice('%s: Request for map list.' %(client.getAddress().getIpString()))
def _debugSendMsg(msg): if not ClientMsg.myConnection: return print "DEBUG SEND MESSAGE:", msg datagram = NetDatagram() datagram.addString(pickle.dumps(msg, pickle.HIGHEST_PROTOCOL)) ClientMsg.cWriter.send(datagram, ClientMsg.myConnection) ClientMsg.notify.debug("Client posted a message: %s", msg)
def _sendMsg(msg, sterner=False): if not ClientMsg.myConnection: return if not sterner: msg = ( ClientMsg.game_id, ClientMsg.player_id, ) + msg datagram = NetDatagram() datagram.addString(pickle.dumps(msg, pickle.HIGHEST_PROTOCOL)) ClientMsg.cWriter.send(datagram, ClientMsg.myConnection) ClientMsg.notify.debug("Client posted a message: %s", msg)
def __sendNewGameReq(self, gamename, mapID, numplayers): ''' Create a new game on the server. name (String): the name of the game mapID (String): the MD5 ID of the map maxplayers (Int): the max players allowed''' LOG.debug('Sending new game request %s'%map) # Send Request if (self._connected and self._authorized): pkg = NetDatagram() pkg.addUint16(MSG_NEWGAME_REQ) pkg.addString(gamename) pkg.addString(mapID) pkg.addUint32(numplayers) self._cWriter.send(pkg, self._tcpSocket)
def __sendAuthReq(self, username, password): ''' Send user name and password. The password is encypted first using SHA256. username (String): the username password (String): the password''' if self._connected: LOG.notice("Sending authorization") h = hashlib.sha256() h.update(password) pkg = NetDatagram() pkg.addUint16(MSG_AUTH_REQ) pkg.addString(username) pkg.addString(h.hexdigest()) self._cWriter.send(pkg, self._tcpSocket) else: LOG.error("Cant authorize, we are not connected")
def __handleJoinGame(self, data, msgID, client): ''' Add client to the requested game. 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 id = data.getUint32() resp = 0 # Find the game game = None mapMD5 = "00000000000000000000000000000000" print self.games for g in self.games: if g.id == id: game = g mapMD5 = g.mapID if game == None: LOG.debug('No such game') resp = 0 elif len(game.connections) >= game.numPlayers: LOG.debug('Game full') resp = 1 else: game.addPlayer(client) LOG.debug('Ok, joining game') resp = 2 # Send response pkg = NetDatagram() pkg.addUint16(MSG_JOINGAME_RES) pkg.addUint32(resp) pkg.addString(mapMD5) self._cWriter.send(pkg, client) self._console.printNotice('%s: Request to join game id %d, gave %d.'%(client.getAddress().getIpString(),id,resp))
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()))