def myProcessDataFunction(self, netDatagram): # check a message and do what it says myIterator = PyDatagramIterator(netDatagram) msgID = myIterator.getUint8() if msgID == PRINT_MESSAGE: # This is a debugging message messageToPrint = myIterator.getString() print messageToPrint elif msgID == CAR_MESSAGE: # This updates a car carNum = myIterator.getUint8() for num in self.ignore: # if the car message is out of date, ignore it if num == carNum: break else: # else update the car carXpos = myIterator.getFloat32() carYpos = myIterator.getFloat32() carXvel = myIterator.getFloat32() carYvel = myIterator.getFloat32() carHeading = myIterator.getFloat32() carInput = [] for i in range(5): carInput.append(myIterator.getBool()) carLights = myIterator.getBool() carHp = myIterator.getInt32() self.updatePositions(carNum, (carXpos, carYpos, carXvel, carYvel, carHeading, carInput, carLights, carHp)) elif msgID == NEW_PLAYER_MESSAGE: # This creates a new player if len(self.carData.carlist) >= self.players: self.cWriter.send(self.startDatagram(), netDatagram.getConnection()) self.cWriter.send(self.mapDatagram(), netDatagram.getConnection()) self.cWriter.send(self.addNewCar(), netDatagram.getConnection()) self.returnAllCars(netDatagram.getConnection()) elif msgID == COLLIDED_MESSAGE: # This verifies that a car has recieved its collision message and is now up to date carNum = myIterator.getUint8() self.ignore.remove(carNum) elif msgID == END_MESSAGE: # This recieves a player score self.playerscores.append((myIterator.getString(), myIterator.getInt32()))
def _processData(self, netDatagram): # convert incoming Datagram to dict myIterator = PyDatagramIterator(netDatagram) msg = {} msg[SEQN] = myIterator.getInt32() msg[AKN] = myIterator.getInt32() msg[MSG_TYPE] = myIterator.getInt16() msg[OOL] = myIterator.getInt8() msg[OAKN] = self.decode(myIterator.getString()) if not msg[MSG_TYPE] == MULT: msg[DATA] = self.decode(myIterator.getString()) else: msg[DATA] = (myIterator.getString()) # msg.append(self.decode(myIterator.getString())) return msg
def server_processing(self,datagram): data_iter = PyDatagramIterator(datagram) msgID = data_iter.getUint16() if msgID == PRINT_MESSAGE: messageToPrint = data_iter.getString() print messageToPrint if msgID == ARMY_MOVE_REQUEST: army_id = data_iter.getInt16() ax = data_iter.getFloat64() ay = data_iter.getFloat64() tx = data_iter.getFloat64() ty = data_iter.getFloat64() base.armies[army_id].set_target(False,tx,ty) if msgID == CLIENT_CHAT: r = data_iter.getInt32() g = data_iter.getInt32() b = data_iter.getInt32() text = data_iter.getString() self.server_messager("chat_send",[(r,g,b),text]) #base.main_menu.chat_add((r,g,b,1),text) if msgID == CLIENT_READY: but_id = data_iter.getInt32() state = data_iter.getInt32() self.server_messager("ready_button",[but_id,state]) #base.main_menu.chat_add((r,g,b,1),text) if msgID == CLIENT_LOADED: self.server_messager("all_loaded",[]) base.menu_manager.menus["mp-load"].load_complete() if msgID == CLIENT_INIT_REQUEST: pn = data_iter.getString() pk = data_iter.getString() base.menu_manager.menus["mp-game"].obj_list[6]["text"] = pn base.menu_manager.menus["mp-game"].obj_list[7]["text"] = pk self.server_messager("client_update",[base.menu_manager.menus["mp-game"].obj_list[4]["text"], base.menu_manager.menus["mp-game"].obj_list[5]["text"], base.menu_manager.menus["mp-game"].obj_list[8]["indicatorValue"], base.menu_manager.menus["mp-game"].map_selected]) if msgID == BUILD_START_REQUEST: t_id = data_iter.getInt32() player = data_iter.getInt32() type = data_iter.getString() base.towers[t_id].build_start() if msgID == BUILD_CANCEL_REQUEST: t_id = data_iter.getInt32() player = data_iter.getInt32() type = data_iter.getString() base.towers[t_id].build_cancel()
def myProcessDataFunction(self, netDatagram): myIterator = PyDatagramIterator(netDatagram) msgID = myIterator.getUint8() if msgID == PRINT_MESSAGE: messageToPrint = myIterator.getString() print messageToPrint elif msgID == CAR_MESSAGE: carNum = myIterator.getUint8() carXpos = myIterator.getFloat32() carYpos = myIterator.getFloat32() carXvel = myIterator.getFloat32() carYvel = myIterator.getFloat32() carHeading = myIterator.getFloat32() carInput = [] for i in range(5): carInput.append(myIterator.getBool()) carHp = myIterator.getInt32() self.updatePositions(carNum, (carXpos, carYpos, carXvel, carYvel, carHeading, carInput, carHp)) elif msgID == NEW_PLAYER_MESSAGE: self.cWriter.send(self.addNewCar(), netDatagram.getConnection()) self.returnAllCars(netDatagram.getConnection())
def client_processing(self,datagram): data_iter = PyDatagramIterator(datagram) msgID = data_iter.getUint16() if msgID == PRINT_MESSAGE: messageToPrint = data_iter.getString() print messageToPrint if msgID == ARMY_MOVE: army_id = data_iter.getInt16() ax = data_iter.getFloat64() ay = data_iter.getFloat64() tx = data_iter.getFloat64() ty = data_iter.getFloat64() base.armies[army_id].node_path.setX(ax) base.armies[army_id].node_path.setY(ay) base.armies[army_id].move_to_point(tx,ty) if msgID == CLIENT_INIT_UPDATE: p1_name = data_iter.getString() p1_kingdom = data_iter.getString() p1_ready = data_iter.getInt32() game_map = data_iter.getInt32() base.menu_manager.menus["mp-game"].client_update(p1_name,p1_kingdom,p1_ready,game_map) if msgID == SERVER_CHAT: r = data_iter.getInt32() g = data_iter.getInt32() b = data_iter.getInt32() text = data_iter.getString() base.menu_manager.menus["mp-game"].chat_add((r,g,b),text) if msgID == SERVER_READY: but_id = data_iter.getInt32() state = data_iter.getInt32() base.menu_manager.menus["mp-game"].obj_list[but_id]["indicatorValue"]=state base.menu_manager.menus["mp-game"].start_game_check() if msgID == SERVER_LOADED: base.menu_manager.menus["mp-load"].load() if msgID == ALL_LOADED: base.menu_manager.menus["mp-load"].load_complete() if msgID == GAME_START: base.menu_manager.menu_goto("mp-load") if msgID == MAP_SET: map = data_iter.getInt32() base.menu_manager.menus["mp-game"].map_selected = map mapname = base.menu_manager.menus["mp-game"].maplist[map]["fullname"] mapimage = base.menu_manager.menus["mp-game"].maplist[map]["preview"] base.menu_manager.menus["mp-game"].obj_list[11]["text"]=mapname base.menu_manager.menus["mp-game"].obj_list[10].setImage(mapimage) if msgID == BATTLE_TURN: bat = data_iter.getInt32() turn = data_iter.getInt32() base.battles[bat].turn_change(turn) if msgID == BATTLE_START: a1 = data_iter.getInt32() a1_x = data_iter.getFloat32() a1_y = data_iter.getFloat32() a2 = data_iter.getInt32() a2_x = data_iter.getFloat32() a2_y = data_iter.getFloat32() army_start = data_iter.getInt32() base.armies[a1].stop() base.armies[a2].stop() base.armies[a1].node_path.setPos(a1_x,a1_y,0) base.armies[a2].node_path.setPos(a2_x,a2_y,0) base.battles.append(TimObjects.Battle([base.armies[a1],base.armies[a2]],army_start)) if msgID == BATTLE_CLASH: battle = data_iter.getInt32() a1 = data_iter.getInt32() a2 = data_iter.getInt32() result = data_iter.getString() buff = data_iter.getInt8() base.battles[battle].clash(base.armies[a1],base.armies[a2],result,buff) if msgID == BATTLE_ARMYADD: bat = data_iter.getInt32() army = data_iter.getInt32() a_x = data_iter.getFloat32() a_y = data_iter.getFloat32() base.battles[bat].add_army(base.armies[army]) base.armies[army].node_path.setPos(a_x,a_y,0) if msgID == BATTLE_END: bat = data_iter.getInt32() base.battles[bat].end() if msgID == BUILD_START: t_id = data_iter.getInt32() player = data_iter.getInt8() type = data_iter.getString() base.towers[t_id].build_start() if msgID == TOWER_CAPTURE: t_id = data_iter.getInt32() player = data_iter.getInt8() base.towers[t_id].change_owner(player) if msgID == BUILD_CANCEL: t_id = data_iter.getInt32() base.towers[t_id].build_cancel() if msgID == BUILD_COMPLETE: t_id = data_iter.getInt32() player = data_iter.getInt8() type = data_iter.getString() base.towers[t_id].create_counter()
def myProcessDataFunction(self, netDatagram): # check a message and do what it says myIterator = PyDatagramIterator(netDatagram) msgID = myIterator.getUint8() if msgID == PRINT_MESSAGE: # This is a debugging message messageToPrint = myIterator.getString() print messageToPrint elif msgID == PLAYER_ASSIGNMENT_MESSAGE: # This assigns the player to a car playerNum = myIterator.getUint8() self.carData.index = playerNum self.playername += " (%d)"%playerNum carXpos = myIterator.getFloat32() carYpos = myIterator.getFloat32() carXvel = myIterator.getFloat32() carYvel = myIterator.getFloat32() carHeading = myIterator.getFloat32() carInput = [] for i in range(5): carInput.append(myIterator.getBool()) carLights = myIterator.getBool() carHp = myIterator.getInt32() self.updatePositions(playerNum, (carXpos, carYpos, carXvel, carYvel, carHeading, carInput, carLights, carHp)) elif msgID == CAR_MESSAGE: # This updates a car carNum = myIterator.getUint8() if carNum != self.carData.index: carXpos = myIterator.getFloat32() carYpos = myIterator.getFloat32() carXvel = myIterator.getFloat32() carYvel = myIterator.getFloat32() carHeading = myIterator.getFloat32() carInput = [] for i in range(5): carInput.append(myIterator.getBool()) carLights = myIterator.getBool() carHp = myIterator.getInt32() self.updatePositions(carNum, (carXpos, carYpos, carXvel, carYvel, carHeading, carInput, carLights, carHp)) elif msgID == COLLIDED_MESSAGE: # This runs car-car collisions collisionFrom = myIterator.getUint8() if collisionFrom == self.carData.index: self.carHitSound.play() self.doCarCollision(myIterator.getUint8()) self.cWriter.send(self.verifyCollisionMessage(), self.myConnection) elif msgID == MAP_MESSAGE: # This sets the map map = myIterator.getString() print map world_loader = w_loader() world_loader.load_world(map) global spawn_locations self.carData.spos = spawn_locations elif msgID == BEGIN_MESSAGE: # This starts the game self.carData.go = True self.textWaitObject.destroy() self.startSound.play() elif msgID == END_MESSAGE: # This ends the game, and then displays the score on the second receipt self.carData.go = False num = myIterator.getInt32() if num == -1: scoreDatagram = self.scoreDatagram() self.cWriter.send(scoreDatagram, self.myConnection) else: textytext = "Most Numerous Deaths:" for i in range(num): textytext += "\n\n%s: %d"%(myIterator.getString(), myIterator.getInt32()) self.textScore = OnscreenText(text=textytext, style=1, fg=(1,1,1,1), pos=(0,0.9), scale = .08)