예제 #1
0
 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()))
예제 #2
0
 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
예제 #3
0
 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()
예제 #4
0
 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())
예제 #5
0
 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()
예제 #6
0
 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)