예제 #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 receiveResponse106(self,task):	
		while self.cReader.dataAvailable():
			datagram6 = NetDatagram()
			# Retrieve the contents of the datagram.
			if self.cReader.getData(datagram6):
				
				myIterator = PyDatagramIterator(datagram6)
                                print myIterator.getUint16()
				
                                msg = myIterator.getString()
                                
                                if msg is not None:
				    print "<-Server response:"
				    print msg
				    print myIterator.getUint32()
				    print myIterator.getUint32()
				    print myIterator.getUint32()
				    print myIterator.getUint32()
				    print myIterator.getUint32()
                                    raw_input("Press Enter to continue...")
                                    self.received = 1
				    # Attack
				    #raw_input("Press Enter to continue...") 
				    taskMgr.add(self.sendRequest108, 'health')
		return task.again				    
예제 #4
0
 def server_task(self, task):
     if self.listener.newConnectionAvailable():
         rendezvous = PointerToConnection()
         netAddress = NetAddress()
         newConnection = PointerToConnection()
         if self.listener.getNewConnection(rendezvous, netAddress, newConnection):
             print 'GOT CONNECTION FROM', netAddress
             newConnection = newConnection.p()
             self.connections.append(newConnection)
             self.reader.addConnection(newConnection)
             self.last_pid += 1
             self.players[netAddress.getIpString()] = Player(pid=self.last_pid, draw=False)
     while self.manager.resetConnectionAvailable():
         connPointer = PointerToConnection()
         self.manager.getResetConnection(connPointer)
         connection = connPointer.p()
         print 'LOST CONNECTION FROM', connection
         # Remove the connection we just found to be "reset" or "disconnected"
         self.reader.removeConnection(connection)
         # Loop through the activeConnections till we find the connection we just deleted
         # and remove it from our activeConnections list
         for idx in range(0, len(self.connections)):
             if self.connections[idx] == connection:
                 del self.connections[c]
                 break
     while self.reader.dataAvailable():
         datagram = NetDatagram()
         if self.reader.getData(datagram):
             conn = datagram.getConnection()
             dataIter = PyDatagramIterator(datagram)
             addr = conn.getAddress()
             player = self.players[addr.getIpString()]
             player.handle_move(dataIter.getString(), dataIter.getBool())
     return task.cont
예제 #5
0
    def receiveResponse106(self, task):
        while self.cReader.dataAvailable():
            datagram6 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram6):

                myIterator = PyDatagramIterator(datagram6)
                print myIterator.getUint16()

                msg = myIterator.getString()

                if msg is not None:
                    print "<-Server response:"
                    print msg
                    print myIterator.getUint32()
                    print myIterator.getUint32()
                    print myIterator.getUint32()
                    print myIterator.getUint32()
                    print myIterator.getUint32()
                    raw_input("Press Enter to continue...")
                    self.received = 1
                    # Attack
                    #raw_input("Press Enter to continue...")
                    taskMgr.add(self.sendRequest108, 'health')
        return task.again
예제 #6
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()
예제 #7
0
    def __gotHouse(self, db, retcode):
        assert (self.notify.debug(
            "__gotHouse(%s, %s): %s" %
            (list(db.values.keys()), retcode, self.doId)))
        if retcode != 0:
            self.notify.warning("House %s for avatar %s does not exist!" %
                                (self.av.houseId, self.av.doId))
            self.sendCatalog(0)
            return

        atticItems = []
        atticWallpaper = []
        atticWindows = []
        interiorItems = []

        dg = db.values.get('setAtticItems')
        if dg:
            di = PyDatagramIterator(dg)
            blob = di.getString()
            atticItems = CatalogItemList.CatalogItemList(
                blob, store=CatalogItem.Customization)
        dg = db.values.get('setAtticWallpaper')
        if dg:
            di = PyDatagramIterator(dg)
            blob = di.getString()
            atticWallpaper = CatalogItemList.CatalogItemList(
                blob, store=CatalogItem.Customization)
        dg = db.values.get('setAtticWindows')
        if dg:
            di = PyDatagramIterator(dg)
            blob = di.getString()
            atticWindows = CatalogItemList.CatalogItemList(
                blob, store=CatalogItem.Customization)
        dg = db.values.get('setInteriorItems')
        if dg:
            di = PyDatagramIterator(dg)
            blob = di.getString()
            interiorItems = CatalogItemList.CatalogItemList(
                blob, store=CatalogItem.Location | CatalogItem.Customization)

        # Finally we're ready to tell the user what he needs to know.
        numAtticItems = len(atticItems) + len(atticWallpaper) + len(
            atticWindows)
        numHouseItems = numAtticItems + len(interiorItems)
        self.sendCatalog(numHouseItems)
예제 #8
0
파일: client_net.py 프로젝트: croxis/itf
    def begin(self):
        if self.cReader.dataAvailable():
            datagram = NetDatagram()  # catch the incoming data in this instance
            # Check the return value; if we were threaded, someone else could have
            # snagged this data before we did
            if self.cReader.getData(datagram):
                myIterator = PyDatagramIterator(datagram)
                msgID = myIterator.getUint8()

                #If not in our protocol range then we just reject
                if msgID < 0 or msgID > 200:
                    return

                #Order of these will need to be optimized later
                #We now pull out the rest of our headers
                remotePacketCount = myIterator.getUint8()
                ack = myIterator.getUint8()
                acks = myIterator.getUint16()
                hashID = myIterator.getUint16()
                sourceOfMessage = datagram.getConnection()

                if msgID == protocol.NEW_SHIP:
                    log.info("New ship")
                    playerPilotID = myIterator.getUint16()
                    shipID = myIterator.getUint16()
                    shipName = myIterator.getString()
                    health = myIterator.getUint8()
                    position = Point3(myIterator.getFloat32(), myIterator.getFloat32(), myIterator.getFloat32())
                    linearVelocity = Vec3(myIterator.getFloat32(), myIterator.getFloat32(), myIterator.getFloat32())
                    rotiation = VBase3(myIterator.getFloat32(), myIterator.getFloat32(), myIterator.getFloat32())
                    angularVelocity = Vec3(myIterator.getFloat32(), myIterator.getFloat32(), myIterator.getFloat32())
                    ship = sandbox.addEntity(shipID)
                    component = ships.PilotComponent()
                    component.accountEntityID = playerPilotID
                    ship.addComponent(component)
                    component = ships.BulletPhysicsComponent()
                    messenger.send("addSpaceShip", [component, shipName, position, linearVelocity])
                    ship.addComponent(component)
                    component = ships.ThrustComponent()
                    ship.addComponent(component)
                    component = ships.InfoComponent()
                    component.health = health
                    component.name = shipName
                    ship.addComponent(component)
                elif msgID == protocol.PLAYER_MOVED_SHIP:
                    log.debug("Player moved ship")
                    accountID = myIterator.getUint16()
                    shipID = myIterator.getUint16()
                    print sandbox.components[shipID]
                    universals.shipNode = sandbox.components[shipID][ships.BulletPhysicsComponent].nodePath
                elif msgID == protocol.LOGIN_ACCEPTED:
                    log.info("Login accepted")
                    entityID = myIterator.getUint8()
                    universals.day = myIterator.getFloat32()
                elif msgID == protocol.LOGIN_DENIED:
                    log.info("Login failed")
예제 #9
0
	def handle_datagram(self, datagram):
		self.connection = datagram.getConnection()
		if not self.connection:
			self.boot_invalid_connection()

		di = PyDatagramIterator(datagram)
		msg_type = di.getUint16()

		if msg_type == REQUEST_FOR_LOGIN:
			self.database_mgr.handle_login_request(self, self.connection, account_name=di.getString(), account_password=di.getString())
		elif msg_type == REQUEST_FOR_REGISTER:
			self.database_mgr.handle_create_account_request(self, self.connection, di.getString(), di.getString())
		elif msg_type == REQUEST_FOR_PASSWORD_CHANGE:
			return NotImplemented
		elif msg_type == REQUEST_FOR_ACCOUNT_DELETE:
			return NotImplemented
		else:
			print ("Database: Recieved an unknown protocol request: %d from %s" % (msg_type, str(self.connection)))
			return
예제 #10
0
    def __gotOwnerAv(self, db, retcode):
        assert (self.notify.debug(
            "__gotOwnerAv(%s, %s): %s" %
            (list(db.values.keys()), retcode, self.doId)))
        if retcode != 0:
            self.notify.warning("Avatar %s for house %s does not exist!" %
                                (self.ownerId, self.doId))
            return

        # The avatar still exists, so check its properties.
        onOrder = None
        mailboxContents = None
        awardMailboxContents = None

        dg = db.values.get('setDeliverySchedule')
        if dg:
            di = PyDatagramIterator(dg)
            blob = di.getString()
            onOrder = CatalogItemList.CatalogItemList(
                blob,
                store=CatalogItem.Customization | CatalogItem.DeliveryDate)

        dg = db.values.get('setMailboxContents')
        if dg:
            di = PyDatagramIterator(dg)
            blob = di.getString()
            mailboxContents = CatalogItemList.CatalogItemList(
                blob, store=CatalogItem.Customization)

        dg = db.values.get('setMaxHp')
        if dg:
            di = PyDatagramIterator(dg)
            hp = di.getUint16()

        dg = db.values.get('setAwardMailboxContents')
        if dg:
            di = PyDatagramIterator(dg)
            blob = di.getString()
            awardMailboxContents = CatalogItemList.CatalogItemList(
                blob, store=CatalogItem.Customization)

        #self.b_setCannonEnabled(1)
        self.__checkMailbox(onOrder, mailboxContents, 0, awardMailboxContents)
예제 #11
0
    def receiveResponse301(self):

        while self.cReader.dataAvailable():
            datagram301 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram301):
                myIterator = PyDatagramIterator(datagram301)
                p = myIterator.getUint16()
                if p == 213:
                    un = myIterator.getString()
                    cname = myIterator.getString()
                    ctype = myIterator.getUint32()
                    cteam = myIterator.getUint32()
                    if un == MyApp.uname:
                        abc = 'abc'
                    else:
                        print cname + ' just joined a game......!! hurray'

                    #print msg, " received"

                    self.received = 1
예제 #12
0
    def process(self, data):
        it = PyDatagramIterator(data)
        msgid = it.getUint8()

        if msgid == 0:
            pass
        elif msgid == 1:
            command = it.getString()
            self.printMessage("new command:", command)
            messenger.send(command)

        return self.buildReply(0, "ok")
예제 #13
0
	def receiveResponse301(self):
		
		while self.cReader.dataAvailable():
			datagram301 = NetDatagram()
			# Retrieve the contents of the datagram.
			if self.cReader.getData(datagram301):
				myIterator = PyDatagramIterator(datagram301)
                                p =  myIterator.getUint16()
                                if p == 213:
					un = myIterator.getString()
					cname = myIterator.getString()
					ctype = myIterator.getUint32()
					cteam = myIterator.getUint32()	
					if un ==  MyApp.uname:
						abc = 'abc'
					else:	
						print cname+' just joined a game......!! hurray'
				
					#print msg, " received"
					
					self.received = 1
예제 #14
0
 def _interpretDatagram (self, datagram):
     """
         Interprets a received datagram and performs actions based on its
          values.
     """
     msg = PyDatagramIterator(datagram)
     msgType = msg.getUint8()
     if msgType == DEBUG_MESSAGE:
         print (msg.getString())
     elif msgType == UPDATE_PLAYER_INFO:
         data = msg.getString()
         self._updatePlayerInfoHandler(datagram.getConnection().this, data)
     elif msgType == SPAWN_CHARACTER:
         data = msg.getString()
         dataDict = json.loads(data)
         self._onSpawnHandler(dataDict)
     elif msgType == SYNC_ACTION:
         data = msg.getString()
         dataDict = json.loads(data)
         self._onActionSyncHandler(dataDict, datagram.getConnection())
     elif msgType == SYNC_RESPAWN:
         data = msg.getString()
         dataDict = json.loads(data)
         self._onRespawnRequestReceived(dataDict)
     elif msgType == WIN_STATE:
         data = msg.getString()
         self._onGameWon(data)
예제 #15
0
 def _interpretDatagram(self, datagram):
     """
         Interprets a received datagram and performs actions based on
          its values.
     """
     msg = PyDatagramIterator(datagram)
     msgType = msg.getUint8()
     if msgType == DEBUG_MESSAGE:
         print(msg.getString())
     elif msgType == MAP_MESSAGE:
         print("[Client Received Map Data]")
         if self._gameManager.getTileMap() == None:
             data = msg.getString32()
             self._gameManager.onClientFirstReceivedMap(data)
     elif msgType == UPDATE_PLAYER_INFO:
         data = msg.getString()
         self._updatePlayerInfoHandler(data)
     elif msgType == SPAWN_CHARACTER:
         data = msg.getString()
         dataDict = json.loads(data)
         self._onSpawnHandler(dataDict)
     elif msgType == SYNC_ACTION:
         data = msg.getString()
         dataDict = json.loads(data)
         self._onActionSyncHandler(dataDict)
     elif msgType == SYNC_HEALTH:
         data = msg.getString()
         dataDict = json.loads(data)
         self._onHealthSyncHandler(dataDict)
     elif msgType == SYNC_DEATH:
         data = msg.getString()
         dataDict = json.loads(data)
         self._onDeathSyncHandler(dataDict)
     elif msgType == SYNC_RESPAWN:
         data = msg.getString()
         dataDict = json.loads(data)
         self._onRespawnPermissionGranted(dataDict)
     elif msgType == SPAWN_ITEM:
         data = msg.getString()
         dataDict = json.loads(data)
         self._onItemSpawned(dataDict)
     elif msgType == WIN_STATE:
         data = msg.getString()
         self._onGameWon(data)
예제 #16
0
파일: server_net.py 프로젝트: croxis/itf
    def begin(self):
        if self.cReader.dataAvailable():
            datagram = NetDatagram()  # catch the incoming data in this instance
            # Check the return value; if we were threaded, someone else could have
            # snagged this data before we did
            if self.cReader.getData(datagram):
                myIterator = PyDatagramIterator(datagram)
                msgID = myIterator.getUint8()

                #If not in our protocol range then we just reject
                if msgID < 0 or msgID > 200:
                    return

                self.lastAck[datagram.getAddress()] = datetime.datetime.now()
                #TODO Switch to ip address and port

                #Order of these will need to be optimized later
                #We now pull out the rest of our headers
                remotePacketCount = myIterator.getUint8()
                ack = myIterator.getUint8()
                acks = myIterator.getUint16()
                hashID = myIterator.getUint16()

                if msgID == protocol.LOGIN:
                    username = myIterator.getString()
                    password = myIterator.getString()
                    if username not in accountEntities:
                        entity = sandbox.createEntity()
                        component = AccountComponent()
                        component.name = username
                        component.passwordHash = password
                        if not accountEntities:
                            component.owner = True
                        component.address = datagram.getAddress()
                        entity.addComponent(component)
                        accountEntities[username] = entity.id
                        log.info("New player " + username + " logged in.")
                        #
                        self.activePlayers.append(component)
                        self.activeConnections[component.address] = component
                        ackDatagram = protocol.loginAccepted(entity.id)
                        self.sendData(ackDatagram, datagram.getAddress())
                        #TODO: Send initial states?
                        messenger.send("newPlayerShip", [component, entity])
                    else:
                        component = sandbox.entities[accountEntities[username]].get_component(AccountComponent)
                        if component.passwordHash != password:
                            log.info("Player " + username + " has the wrong password.")
                        else:
                            component.connection = datagram.getConnection()
                            log.info("Player " + username + " logged in.")
예제 #17
0
    def process(self, data):
        #print "Got some data"
        it = PyDatagramIterator(data)
        msgid = it.getUint8()
        
        if msgid == 1:
            direction['1']=it.getString()
            #self.printMessage("Server received:", direction['1'])
        
        if msgid == 23:
            print "server got shout out"
            update = PyDatagram()
            update.addUint8(23)
            self.Application.server.broadcast(update)
        #standard update
        if msgid == 13:
            tempID = it.getInt8()
            #print "updating position for player ", tempID
            
            self.Application.players[tempID].setX(it.getFloat32())
            self.Application.players[tempID].setY(it.getFloat32())
            self.Application.players[tempID].setZ(it.getFloat32())
            self.Application.players[tempID].setH(it.getFloat32())
            self.Application.players[tempID].setP(it.getFloat32())
            self.Application.players[tempID].setR(it.getFloat32())
            
            self.Application.players[tempID].setPythonTag("velocity",it.getFloat32())
            #self.printMessage("Server received:", direction[2])        
        
        
        elif msgid == 38:
            if self.Application.server.isStarted is True:
                print "Game over"
                data = PyDatagram()
                data.addInt8(38)
                self.Application.server.broadcast(data)
        '''if msgid == 3:
            direction['3']=it.getString()
           3 self.printMessage("Server received:", direction['3'])  

        if msgid == 4:
            direction['4']=it.getString()
            self.printMessage("Server received:", direction['4'])

        if msgid == 5:
            direction['5']=it.getString()
            self.printMessage("Server received:", direction['5'])
'''
            
        return None
예제 #18
0
    def readMsg():
        """Return the message, if any, or None if there was nothing to read"""

        if not ClientMsg.myConnection:
            return None

        if ClientMsg.cReader.dataAvailable():
            datagram = NetDatagram()
            if ClientMsg.cReader.getData(datagram):
                dgi = PyDatagramIterator(datagram)
                msg = pickle.loads(dgi.getString())
                ClientMsg.notify.info("Client received a message:%s", msg)

                return msg

        return None
예제 #19
0
 def server_task(self, task):
     if self.listener.newConnectionAvailable():
         rendezvous = PointerToConnection()
         netAddress = NetAddress()
         newConnection = PointerToConnection()
         if self.listener.getNewConnection(rendezvous, netAddress,
                                           newConnection):
             print 'GOT CONNECTION FROM', netAddress
             newConnection = newConnection.p()
             newConnection.setNoDelay(True)
             self.connections.append(newConnection)
             self.reader.addConnection(newConnection)
             self.last_pid += 1
             self.players[netAddress.getIpString()] = Player(
                 self.last_pid, self.world.create_walker())
     while self.manager.resetConnectionAvailable():
         connPointer = PointerToConnection()
         self.manager.getResetConnection(connPointer)
         connection = connPointer.p()
         print 'LOST CONNECTION FROM', connection
         # Remove the connection we just found to be "reset" or "disconnected"
         self.reader.removeConnection(connection)
         # Loop through the activeConnections till we find the connection we just deleted
         # and remove it from our activeConnections list
         for idx in range(0, len(self.connections)):
             if self.connections[idx] == connection:
                 del self.connections[idx]
                 break
     while self.reader.dataAvailable():
         datagram = NetDatagram()
         if self.reader.getData(datagram):
             conn = datagram.getConnection()
             dataIter = PyDatagramIterator(datagram)
             addr = conn.getAddress()
             player = self.players[addr.getIpString()]
             player.handle_command(dataIter.getString(), dataIter.getBool())
     update = PyDatagram()
     update.addInt8(len([o for o in self.world.updatables if o.moved]))
     for obj in self.world.updatables:
         obj.add_update(update)
     for conn in self.connections:
         self.writer.send(update, conn)
     return task.again
예제 #20
0
파일: network.py 프로젝트: airvoss/pavara
 def server_task(self, task):
     if self.listener.newConnectionAvailable():
         rendezvous = PointerToConnection()
         netAddress = NetAddress()
         newConnection = PointerToConnection()
         if self.listener.getNewConnection(rendezvous, netAddress, newConnection):
             print 'GOT CONNECTION FROM', netAddress
             newConnection = newConnection.p()
             newConnection.setNoDelay(True)
             self.connections.append(newConnection)
             self.reader.addConnection(newConnection)
             self.last_pid += 1
             self.players[netAddress.getIpString()] = Player(self.last_pid, self.world.create_walker())
     while self.manager.resetConnectionAvailable():
         connPointer = PointerToConnection()
         self.manager.getResetConnection(connPointer)
         connection = connPointer.p()
         print 'LOST CONNECTION FROM', connection
         # Remove the connection we just found to be "reset" or "disconnected"
         self.reader.removeConnection(connection)
         # Loop through the activeConnections till we find the connection we just deleted
         # and remove it from our activeConnections list
         for idx in range(0, len(self.connections)):
             if self.connections[idx] == connection:
                 del self.connections[idx]
                 break
     while self.reader.dataAvailable():
         datagram = NetDatagram()
         if self.reader.getData(datagram):
             conn = datagram.getConnection()
             dataIter = PyDatagramIterator(datagram)
             addr = conn.getAddress()
             player = self.players[addr.getIpString()]
             player.handle_command(dataIter.getString(), dataIter.getBool())
     update = PyDatagram()
     update.addInt8(len([o for o in self.world.updatables if o.moved]))
     for obj in self.world.updatables:
         obj.add_update(update)
     for conn in self.connections:
         self.writer.send(update, conn)
     return task.again
예제 #21
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())
예제 #22
0
파일: network.py 프로젝트: airvoss/pavara
 def update(self, task):
     while self.reader.dataAvailable():
         datagram = NetDatagram()
         if self.reader.getData(datagram):
             update = PyDatagramIterator(datagram)
             num_objects = update.getInt8()
             for i in range(num_objects):
                 name = update.getString()
                 x = update.getFloat32()
                 y = update.getFloat32()
                 z = update.getFloat32()
                 h = update.getFloat32()
                 p = update.getFloat32()
                 r = update.getFloat32()
                 if name.startswith('Walker') and name not in self.world.objects:
                     self.world.create_walker(name)
                 obj = self.world.objects.get(name)
                 if obj:
                     obj.move((x, y, z))
                     obj.rotate(h, p, r)
     return task.cont
예제 #23
0
 def update(self, task):
     while self.reader.dataAvailable():
         datagram = NetDatagram()
         if self.reader.getData(datagram):
             update = PyDatagramIterator(datagram)
             num_objects = update.getInt8()
             for i in range(num_objects):
                 name = update.getString()
                 x = update.getFloat32()
                 y = update.getFloat32()
                 z = update.getFloat32()
                 h = update.getFloat32()
                 p = update.getFloat32()
                 r = update.getFloat32()
                 if name.startswith(
                         'Walker') and name not in self.world.objects:
                     self.world.create_walker(name)
                 obj = self.world.objects.get(name)
                 if obj:
                     obj.move((x, y, z))
                     obj.rotate(h, p, r)
     return task.cont
예제 #24
0
 def myProcessDataFunction(self, netDatagram):
     myIterator = PyDatagramIterator(netDatagram)
     msgID = myIterator.getUint8()
     messageToPrint = myIterator.getString().split(',')
     #print( messageToPrint)
     if msgID == 1:  #start
         Starttime = float((messageToPrint)[0])
         start = float((messageToPrint)[1])
         self.RunModel(start, Starttime)
     if msgID == 2:  #pause
         Stoptime = float((messageToPrint)[0])
         self.StopModel(Stoptime)
     if msgID == 3:
         sys.exit()
     if msgID == 4:
         self.MosaicOverlap = float((messageToPrint)[1])
         self.ActivateMosaics()
     if msgID == 5:
         pos = float(messageToPrint[0])
         Pixelx = float(messageToPrint[1])
         Pixely = float(messageToPrint[2])
         self.get2DPoint(pos, Pixelx, Pixely)
예제 #25
0
 def server_task(self, task):
     if self.listener.newConnectionAvailable():
         rendezvous = PointerToConnection()
         netAddress = NetAddress()
         newConnection = PointerToConnection()
         if self.listener.getNewConnection(rendezvous, netAddress,
                                           newConnection):
             print 'GOT CONNECTION FROM', netAddress
             newConnection = newConnection.p()
             self.connections.append(newConnection)
             self.reader.addConnection(newConnection)
             self.last_pid += 1
             self.players[netAddress.getIpString()] = Player(
                 pid=self.last_pid, draw=False)
     while self.manager.resetConnectionAvailable():
         connPointer = PointerToConnection()
         self.manager.getResetConnection(connPointer)
         connection = connPointer.p()
         print 'LOST CONNECTION FROM', connection
         # Remove the connection we just found to be "reset" or "disconnected"
         self.reader.removeConnection(connection)
         # Loop through the activeConnections till we find the connection we just deleted
         # and remove it from our activeConnections list
         for idx in range(0, len(self.connections)):
             if self.connections[idx] == connection:
                 del self.connections[c]
                 break
     while self.reader.dataAvailable():
         datagram = NetDatagram()
         if self.reader.getData(datagram):
             conn = datagram.getConnection()
             dataIter = PyDatagramIterator(datagram)
             addr = conn.getAddress()
             player = self.players[addr.getIpString()]
             player.handle_move(dataIter.getString(), dataIter.getBool())
     return task.cont
예제 #26
0
class PlayerReg(DirectObject):  #This class will regulate the players
    def __init__(self):
        self.playerList = []
        self.numofplayers = 0

    def ProcessData(self, datagram, m, chatClass):
        #process received data
        self.iterator = PyDatagramIterator(datagram)
        self.type = self.iterator.getString()
        if (self.type == "init"):
            print "initializing"
            #initialize
            m.setPlayerNum(self.iterator.getUint8())
            self.num = self.iterator.getFloat64()
            for i in range(int(self.num)):
                if (i != m.playernum):
                    self.playerList.append(Player())
                    self.playerList[i].username = self.iterator.getString()
                    self.playerList[i].load()
                    self.playerList[i].currentPos[
                        'x'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos[
                        'y'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos[
                        'z'] = self.iterator.getFloat64()
                    print "player ", str(i), " initialized"
                else:
                    self.playerList.append(Player())
            self.numofplayers = self.num
        if (self.type == "update"):
            self.num = self.iterator.getFloat64()
            if (self.num > self.numofplayers):
                for i in range(int(self.numofplayers)):
                    self.playerList[i].currentPos[
                        'x'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos[
                        'y'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos[
                        'z'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos[
                        'h'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos[
                        'p'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos[
                        'r'] = self.iterator.getFloat64()
                for i in range(int(self.numofplayers), int(self.num)):
                    if (i != m.playernum):
                        self.playerList.append(Player())
                        self.playerList[i].load()
                        self.playerList[i].currentPos[
                            'x'] = self.iterator.getFloat64()
                        self.playerList[i].currentPos[
                            'y'] = self.iterator.getFloat64()
                        self.playerList[i].currentPos[
                            'z'] = self.iterator.getFloat64()
                        self.playerList[i].currentPos[
                            'h'] = self.iterator.getFloat64()
                        self.playerList[i].currentPos[
                            'p'] = self.iterator.getFloat64()
                        self.playerList[i].currentPos[
                            'r'] = self.iterator.getFloat64()
                    else:
                        self.playerList.append(Player())
                self.numofplayers = self.num
            else:
                for i in range(int(self.numofplayers)):
                    self.playerList[i].currentPos[
                        'x'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos[
                        'y'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos[
                        'z'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos[
                        'h'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos[
                        'p'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos[
                        'r'] = self.iterator.getFloat64()
        if (self.type == "chat"):
            self.text = self.iterator.getString()
            chatClass.setText(self.text)

    def updatePlayers(self, m):

        if (self.numofplayers != 0):
            for k in range(int(self.numofplayers)):
                #As long as the player is not the client put it where the server says
                if (k != m.playernum):
                    self.playerList[k].model.setPosHpr(
                        self.playerList[k].currentPos['x'],
                        self.playerList[k].currentPos['y'],
                        self.playerList[k].currentPos['z'],
                        self.playerList[k].currentPos['h'],
                        self.playerList[k].currentPos['p'],
                        self.playerList[k].currentPos['r'])
        return Task.cont
예제 #27
0
파일: kickern.py 프로젝트: relet/netkickern
def myProcessDataFunction(datagram):
    global status, P1NAME, P2NAME, lastResetRequest
    global MY_POSITION, kicker, texKicker, texKicker2, mode

    if (role == ROLE_SERVER):
        sender = activeConnections.index(datagram.getConnection())
    data = PyDatagramIterator(datagram)
    #try:
    if True:  #just to keep the indent, in case we need "try" again.
        pktType = data.getUint16()
        if role == ROLE_SERVER:  # packets received only by server
            if pktType == PACKET_MOVE:
                setOpponentMove(data, sender + 1)
            elif pktType == PACKET_MSG:
                timer = data.getUint16()
                msg = data.getString()
                sendMessage(msg, timer)  #broadcast to all
            elif pktType == PACKET_HELLO:
                magic = data.getString()
                proto = data.getUint16()
                soft = data.getString()
                if magic != MAGIC_WORD:
                    print "Connecting party did not identify as netkickern client."
                    sys.exit(1)
                if proto != PROTOCOL_VERSION:
                    print "Connecting party used incompatible protocol version " + str(
                        proto) + "."
                    print "We are using " + str(PROTOCOL_VERSION) + "."
                    sys.exit(1)
                if soft != SOFTWARE_VERSION:
                    print "WARNING: Client is using software " + soft + "."
                print "Ok, client " + str(sender + 1) + " connected."
                status = STATUS_INIT
                qpref = PyDatagram()  #query for client preferences
                qpref.addUint16(PACKET_QPREF)
                qpref.addString(SOFTWARE_VERSION)
                cWriter.send(qpref, activeConnections[sender])
            elif pktType == PACKET_PREF:
                if status != STATUS_INIT:
                    return
                prefs = {}
                teamname = data.getString()
                prefs['team'] = teamname
                place = -1
                if (mode == MODE_4P):
                    #assign the last free position, and P1 only if the teamname matches or everything else is given away
                    if not POSITION[3]:
                        place = 3
                    if not POSITION[2]:
                        place = 2
                    if (teamname == TEAMNAME) or (place == -1):
                        if not POSITION[1]:
                            place = 1
                    print "placed player ", sender + 1, " at position ", place
                    POSITION[place] = sender + 1
                    prefs['pos'] = place
                playerPrefs[sender] = prefs
                if (mode == MODE_2P) or (0 in playerPrefs and 1 in playerPrefs
                                         and 2 in playerPrefs):
                    P1NAME = TEAMNAME
                    P2NAME = playerPrefs[0]['team']
                    rename = PyDatagram()
                    rename.addUint16(PACKET_NAME)
                    rename.addString(P1NAME)
                    rename.addString(P2NAME)
                    toAll(rename, activeConnections)
                    if (mode == MODE_4P
                        ):  #inform players of the position they play in
                        for i in range(0, 3):
                            placing = PyDatagram()
                            placing.addUint16(PACKET_PLACE)
                            placing.addUint16(playerPrefs[i]['pos'])
                            cWriter.send(placing, activeConnections[i])
                    resetNames()
                    welcome = PyDatagram()
                    welcome.addUint16(PACKET_START)
                    toAll(welcome, activeConnections)
                    startGame()
            elif pktType == PACKET_PONG:
                stime = data.getFloat64()
                now = time.time()
                deltatime = now - stime  # TODO: use this to delay mouse movements by avg(deltatime)/2
                print "player " + str(sender) + " network delay: " + str(
                    deltatime * 500) + "ms "  #rtt/2
            elif pktType == PACKET_RESET:
                lastResetRequest = time.time()
                playerPrefs[sender]['lastReset'] = lastResetRequest
                if not isResetConfirmed():
                    resetRequest = PyDatagram()  #forward to all clients
                    resetRequest.addUint16(PACKET_RESET)
                    #resetRequest.addUint16(sender) # TODO: tell everyone which player sent the request
                    toAll(resetRequest, activeConnections)
                    setMessage(
                        "Player " + str(sender + 1) +
                        " wishes to reset the ball.\nPress Space to confirm.",
                        3)
        else:  # packets received only by clients
            if pktType == PACKET_SET:
                setGameStatus(data)
            elif pktType == PACKET_SCORE:
                setScore(data)
            elif pktType == PACKET_QPREF:
                soft = data.getString()
                if soft != SOFTWARE_VERSION:
                    print "WARNING: Server is using software " + soft + "."
                status = STATUS_INIT
                pref = PyDatagram()
                pref.addUint16(PACKET_PREF)
                pref.addString(TEAMNAME)
                cWriter.send(pref, serverConnection)
            elif pktType == PACKET_START:
                print "connection to game host confirmed."
                startGame()
            elif pktType == PACKET_MSG:
                timer = data.getUint16()
                msg = data.getString()
                setMessage(msg, timer)
            elif pktType == PACKET_NAME:
                P1NAME = data.getString()
                P2NAME = data.getString()
                resetNames()
            elif pktType == PACKET_PLACE:  #4P only
                MY_POSITION = data.getUint16()
                mode = MODE_4P
                resetGameColours(kicker, texKicker, texKicker2)
            elif pktType == PACKET_PING:
                stime = data.getFloat64()
                pong = PyDatagram()
                pong.addUint16(PACKET_PONG)
                pong.addFloat64(stime)
                cWriter.send(pong, serverConnection)
            elif pktType == PACKET_RESET:
                setMessage(
                    "Another wishes to reset the ball.\nPress Space to confirm.",
                    3)
    #except Exception, e:
    #  print e
    #  sys.exit(1) #wow, this is what I call exception handling..
    return
예제 #28
0
 def processData(self, netDatagram):
     myIterator = PyDatagramIterator(netDatagram)
     return self.decode(myIterator.getString())
예제 #29
0
class PlayerReg(DirectObject):
    def __init__(self):
        self.PlayerList = []
        self.active = 0
        self.timeSinceLastUpdate = 0

    def updatePlayers(self, serverClass, data, type):
        if (type == "positions"):

            self.elapsed = globalClock.getDt()
            self.timeSinceLastUpdate += self.elapsed
            if (self.timeSinceLastUpdate > 0.1):
                if (self.active):
                    self.datagram = PyDatagram()
                    self.datagram.addString("update")

                    self.datagram.addFloat64(self.active)

                    for k in range(self.active):
                        self.datagram.addFloat64(
                            self.PlayerList[k].currentPos['x'])
                        self.datagram.addFloat64(
                            self.PlayerList[k].currentPos['y'])
                        self.datagram.addFloat64(
                            self.PlayerList[k].currentPos['z'])
                        self.datagram.addFloat64(
                            self.PlayerList[k].currentPos['h'])
                        self.datagram.addFloat64(
                            self.PlayerList[k].currentPos['p'])
                        self.datagram.addFloat64(
                            self.PlayerList[k].currentPos['r'])
                    for k in self.PlayerList:
                        self.conn = k.connectionID
                        serverClass.cWriter.send(self.datagram, self.conn)
                self.timeSinceLastUpdate = 0
            return Task.cont

        if (type == "chat"):

            self.iterator = data
            self.datagram = PyDatagram()
            self.datagram.addString("chat")
            self.text = self.iterator.getString()
            self.datagram.addString(self.text)
            for k in self.PlayerList:
                serverClass.cWriter.send(self.datagram, k.connectionID)

    def updateData(self, connection, datagram, serverClass):
        self.iterator = PyDatagramIterator(datagram)
        self.type = self.iterator.getString()
        if (self.type == "positions"):
            for k in self.PlayerList:
                if (k.connectionID == connection):
                    k.currentPos['x'] = self.iterator.getFloat64()
                    k.currentPos['y'] = self.iterator.getFloat64()
                    k.currentPos['z'] = self.iterator.getFloat64()
                    k.currentPos['h'] = self.iterator.getFloat64()
                    k.currentPos['p'] = self.iterator.getFloat64()
                    k.currentPos['r'] = self.iterator.getFloat64()
        if (self.type == "chat"):
            self.updatePlayers(serverClass, self.iterator, "chat")

    def sendInitialInfo(self, i, server):
        self.con = self.PlayerList[i].connectionID
        self.datagram = PyDatagram()
        self.datagram.addString("init")
        self.datagram.addUint8(self.active)
        self.datagram.addFloat64(i)
        for k in self.PlayerList:
            self.datagram.addString(k.username)
            self.datagram.addFloat64(k.currentPos['x'])
            self.datagram.addFloat64(k.currentPos['y'])
            self.datagram.addFloat64(k.currentPos['z'])
        server.cWriter.send(self.datagram, self.con)
예제 #30
0
파일: Login.py 프로젝트: burgui/HW2
 def retrieveStringMessage(self,datagram):
     myIterator = PyDatagramIterator(datagram)
     msg = myIterator.getString()
     print msg, " received"
예제 #31
0
 def myProcessDataFunction(netDatagram):
 	myIterator = PyDatagramIterator(netDatagram)
 	msgID = myIterator.getUnit8()
 	if msgID == 1:
 		msgToPrint = myIterator.getString()
 		print msgToPrint 
예제 #32
0
    def handleDatagram(self, dg):
        if not dg.getLength() > 0:
            return None
        dgi = PyDatagramIterator(dg)
        connection = dg.getConnection()
        msgType = dgi.getUint16()
        if msgType == CLIENT_HEARTBEAT:
            self.notify.debug('Recieved heartbeat.')
        elif msgType == CLIENT_DISCONNECT:
            if connection in self.connectionList:
                self.connectionList.remove(connection)
        elif msgType == CLIENT_SET_ZONE:
            self.handleSetZone(dgi, connection)
        elif msgType == CLIENT_REMOVE_ZONE:
            self.handleRemoveZone(dgi, connection)
        elif msgType == CLIENT_CREATE_OBJECT_REQUIRED:
            self.handleClientCreateObjectRequired(dg, dgi)
        elif msgType == CLIENT_OBJECT_UPDATE_FIELD:
            doId = dgi.getUint32()
            fieldId = dgi.getUint16()
            print "DEBUG: Got Toontown field update for Toontown doId = %d and Toontown fieldId = %d" % (doId, fieldId)
        elif msgType == CLIENT_OBJECT_DELETE:
            self.handleClientDeleteObject(dg, dgi.getUint32())
        elif msgType == CLIENT_OBJECT_DISABLE:
            self.handleClientDisable(dg, dgi.getUint32())
        elif msgType == CLIENT_ADD_INTEREST:
            #self.handleClientAddInterest(self, Client, dgi)
           
            handle = dgi.getUint16()
            contextId = dgi.getUint32()
            parentId = dgi.getUint32()
            zoneList = [dgi.getUint32()]  
            print 'DEBUG: Network :: Interest -> (%d, %d, %d)' % (handle, contextId, parentId)
            while True:
                remainingData = (dg.getLength() - dgi.getCurrentIndex())
                if remainingData == 0:
                    break
                zoneList.append(dgi.getUint32())
            if handle == 2: #Aww yeah we found the tewtow shard list interest!
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(4618) #parentId
                datagram.addUint32(3) #zoneId
                datagram.addUint16(58) #ToontownDistrict DClass Field
                datagram.addUint32(316000000) #Shard ID (doId)
                datagram.addString('Astron is for n00bs') #District name
                datagram.addUint8(1) # 1 - Enabled 0 - Disabled
                datagram.addBool(0)
                self.cw.send(datagram, connection)
            if handle == 4:
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(4618) #parentId
                datagram.addUint32(3) #zoneId
                datagram.addUint16(387) #ToontownDistrict DClass Field
                datagram.addUint32(900000000) #Shard ID (doId)
                datagram.addString("2013-08-22 23:49:46")
                self.cw.send(datagram, connection)
               
                datagran2 = PyDatagram()
                datagran2.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagran2.addUint32(0)
                datagran2.addUint32(0)
                datagran2.addUint16(172)
                datagran2.addUint32(637100008)
                arg = []
                datagran2.addUint16(len(arg) << 1)
                for i in arg:
                    datagran2.addInt16(int(i))
                datagran2.addUint16(len(arg) << 1)
                for i in arg:
                    datagran2.addInt16(int(i))
                datagran2.addUint16(len(arg) << 1)
                for i in arg:
                    datagran2.addInt16(int(i))
                datagran2.addUint16(len(arg) << 1)
                for i in arg:
                    datagran2.addInt16(int(i))
                #arg = [64, 65, 66, 10, 15]
                datagran2.addUint16(len(arg))
                for i in arg:
                    datagran2.addUint16(int(i))
                self.cw.send(datagran2, connection)
           
            if handle == 5:
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_OBJECT_UPDATE_FIELD)
                datagram.addUint32(1) #doId
                datagram.addUint16(112) #fieldId
                datagram.addUint32(316000000)
                self.cw.send(datagram, connection)
            datagram = PyDatagram()
            datagram.addUint16(CLIENT_DONE_INTEREST_RESP)
            datagram.addUint16(handle)
            datagram.addUint32(contextId)
            datagram.addUint32(parentId)
            for zoneId in zoneList:
                datagram.addUint32(zoneId)
            self.cw.send(datagram, connection)
            datagram = PyDatagram()
            datagram.addUint16(CLIENT_DONE_INTEREST_RESP)
            datagram.addUint16(handle)
            datagram.addUint32(contextId)
            datagram.addUint32(parentId)
            for zoneId in zoneList:
                datagram.addUint32(zoneId)
            self.cw.send(datagram, connection)
        elif msgType == CLIENT_REMOVE_INTEREST:
            return None
        #Lets start with the tewtow specific msgtypes.
        elif msgType == CLIENT_LOGIN_TOONTOWN:
            self.handleClientLoginToontown(dgi, connection)
        elif msgType == CLIENT_GET_AVATARS:
            self.handleGetAvatars(dgi, connection)			

        elif msgType == CLIENT_GET_AVATARS:
            self.handleGetAvatars(dgi, connection)

        elif msgType == CLIENT_CREATE_AVATAR:
            #return None
            datagram = PyDatagram()
            datagram.addUint16(CLIENT_CREATE_AVATAR_RESP)
            datagram.addUint16(0) #echoContext
            datagram.addUint8(0) #returnCode
            datagram.addUint32(1)
            self.cw.send(datagram, connection)
        elif msgType == CLIENT_SET_NAME_PATTERN:
            datagram = PyDatagram()
            datagram.addUint16(CLIENT_SET_NAME_PATTERN_ANSWER)
            datagram.addUint32(1)
            datagram.addUint8(0)
            self.cw.send(datagram, connection)
        elif msgType == CLIENT_SET_AVATAR:
                packer = DCPacker()
                dclass = self.dclassesByName['DistributedToon']
                datagram = PyDatagram()
                datagram.addUint16(15) #CLIENT_GET_AVATAR_DETAILS_RESP Msgtype
                datagram.addUint32(1)
                datagram.addUint8(0)
                datagram.addString('Infinity') #Toon name
                datagram.addString('Unknown')
                datagram.addUint32(0)
                datagram.addBool(1)
                datagram.addString('t\x05\x01\x00\x01\x39\x1b\x33\x1b\31\x1b\x14\x00\x14\x14') #DNA (blob)
                datagram.addUint8(1) #GM
                datagram.addUint16(2500) #Max Bank
                datagram.addUint16(0) #Current Bank
                datagram.addUint16(40) #Max Jellybeans
                datagram.addUint16(0) #Current Jellybeans
                datagram.addUint16(15) #Max Laff
                datagram.addUint16(15) #Current Laff
                datagram.addUint32(0) #Battle ID
                datagram.addString('Unknown') #Experience (blob)
                datagram.addUint8(10) #Max Gag Carry
 
                #setTrackAccess
 
                field = dclass.getField(13)
                print field
                arg = [0, 0, 0, 0, 1, 1, 0]
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addInt16(int(i))

                datagram.addInt8(3) #Track Progress 1
                datagram.addUint32(9) #Track Progress 2
 
               
 
                #setTrackBonusLevel
 
                field = dclass.getField(15)
                print field
 
                arg = [0, 0, 0, 0, 1, 1, 0]
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addInt8(int(i))

                datagram.addString('') #setInventory
 
                #setMaxNPCFriends (Uint16)
 
                datagram.addUint16(16)
               
 
                arg = []
                datagram.addUint16(len(arg) * 5)
                for i in arg:
                    datagram.addUint32(int(i))
 
                datagram.addUint32(316000000) #setDefaultShard
 
                datagram.addUint32(2000) #setDefaultZone
 
                datagram.addString('')
 
 
                field = dclass.getField(22)
                print field
 
                arg = [1000, 2000 , 3000, 4000, 5000, 6000, 8000, 9000, 10000, 11000, 12000, 13000]
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 

                field = dclass.getField(23)
                print field
 
                arg = [1000, 2000 , 3000, 4000, 5000, 6000, 8000, 9000, 10000, 11000, 12000, 13000]
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 
                datagram.addString('') #setInterface
 
                datagram.addUint32(2000) #setLastHood
 
                datagram.addUint8(1) #setTutorialAck
 
                datagram.addUint32(25) #setMaxClothes
 
                #setClothesTopsList(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
 
                #setClothesBottomsList(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                datagram.addUint32(0) #setMaxAccessories
 
                #setHatList(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setGlassessList(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setBackpackList(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setShoesList(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                datagram.addUint8(0) #setHat 1
                datagram.addUint8(0) #setHat 2
                datagram.addUint8(0) #setHat 3
 
                datagram.addUint8(0) #setGlasses 1
                datagram.addUint8(0) #setGlasses 2
                datagram.addUint8(0) #setGlasses 3
 
                datagram.addUint8(0) #setBackpack 1
                datagram.addUint8(0) #setBackpack 2
                datagram.addUint8(0) #setBackpack 3
 
                datagram.addUint8(0) #setShoes 1
                datagram.addUint8(0) #setShoes 2
                datagram.addUint8(0) #setShoes 3
 
                datagram.addString('')
 
                #setEmoteAccess(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setCustomMeeages(uint16array)
 
                arg = []
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addUint16(int(i))
 
                datagram.addString('') #setResistanceMessages
 
                #setPetTrickPhrases(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                datagram.addUint16(0) #setCatalogSchedule 1
                datagram.addUint32(0) #setVatalogSchedule 2
 
                datagram.addString('') #setCatalog 1
                datagram.addString('') #setCatalog 2
                datagram.addString('') #setCatalog 3
 
                datagram.addString('') #setMailBoxContents
 
                datagram.addString('') #SetDeliverySchedule
 
                datagram.addString('') #setGiftSchedule
 
                datagram.addString('') #setAwardMailboxContents
 
                datagram.addString('') #setAwardSchedule
 
                datagram.addUint8(0) #setAwardNotify
 
                datagram.addUint8(0) #setCatalogNotify 1
 
                datagram.addUint8(0) #setCatalogNotify 2
 
                datagram.addUint8(0) #setSpeedChatStyleIndex
 
                #setTeleportAccess (uint32array)
 
                arg = [1000, 2000 , 3000, 4000, 5000, 6000, 8000, 9000, 10000, 11000, 12000, 13000]
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 
                #setCogStatus (uint32array)
                arg = []
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 
                #setCogCount (uint32array)
                arg = []
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 
                #setCogRadar(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setBuildingRadar(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setCogLevels(uint8array)
 
                arg = [0, 0, 0, 0]
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setCogTypes(uint8array)
 
                arg = [0, 0, 0, 0]
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setCogParts (uint32array)
                arg = [0, 0, 0, 0]
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 
                #setCogMerits(uint16array)
 
                arg = [0, 0, 0, 0]
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addUint16(int(i))
 
                datagram.addUint32(0) #setHouseId
 
                #setQuests (uint32array)
                arg = []
                datagram.addUint16(len(arg) << 2)
                for i in arg:
                    datagram.addUint32(int(i))
 
                #setQuestHistory(uint16array)
 
                arg = []
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addUint16(int(i))
 
                datagram.addUint8(0) #setRewardHistory 1
 
                #setRewardHistory 2(uint16array)
 
                arg = []
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addUint16(int(i))
 
 
                datagram.addUint8(1) #setQuestCarryLimit
 
                datagram.addInt16(0) #setCheesyEffect 1
                datagram.addUint32(0) #setCheesyEffect 2
                datagram.addUint32(0) #setCheesyEffect 3
 
                datagram.addUint8(0) #setPosIndex
 
                #setFishCollection 1(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFishCollection 2(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFishCollection 3(uint16array)
 
                arg = []
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addUint16(int(i))
 
                datagram.addUint8(20) #setMaxFishTank
 
                #setFishTank 1(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFishTank 2(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFishTank 3(uint16array)
 
                arg = []
                datagram.addUint16(len(arg) << 1)
                for i in arg:
                    datagram.addUint16(int(i))
 
                datagram.addUint8(1) #setFishingRod
 
                #setFishingTrophies(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFlowerCollection 1(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFlowerCollection 2(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFlowerBasket 1(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                #setFlowerBasket 2(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                datagram.addUint8(25) #setMaxFlowerBasket
 
                #setGardenTrophies(uint8array)
 
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                datagram.addUint8(1) #setShovel
 
                datagram.addUint32(0) #setShovelSkill
 
                datagram.addUint8(1) #setWateringCan
 
                datagram.addUint32(0) #setWateringCanSkill
 
                datagram.addUint32(0) #setPetID
 
                datagram.addUint8(0) #setPetTutorialDone
 
                datagram.addUint8(0) #setFishBingoTutorialDone
 
                datagram.addUint8(0) #setFishBingoMarkTutorialDone
 
                datagram.addInt8(0) #setKartBodyType
 
                datagram.addInt8(0) #setKartBodyColor
 
                datagram.addInt8(0) #setKartAccessoryColor
 
                datagram.addInt8(0) #setKartEngineBlockType
 
                datagram.addInt8(0) #setKartSpoilerType
 
                datagram.addInt8(0) #setKartFrontWheelWellType
 
                datagram.addInt8(0) #setKartBackWheelWellType
 
                datagram.addInt8(0) #setKartRimType
 
                datagram.addInt8(0) #setKartDecalType
 
                datagram.addUint32(100) #setTickets
 
                datagram.addUint8(0) #setKartingHistory 1
                datagram.addUint8(0) #setKartingHistory 2
                datagram.addUint8(0) #setKartingHistory 3
                datagram.addUint8(0) #setKartingHistory 4
                datagram.addUint8(0) #setKartingHistory 5
                datagram.addUint8(0) #setKartingHistory 6
                datagram.addUint8(0) #setKartingHistory 7
                datagram.addUint8(0) #setKartingHistory 8
                datagram.addUint8(0) #setKartingHistory 9
                datagram.addUint8(0) #setKartingHistory 10
                datagram.addUint8(0) #setKartingHistory 11
                datagram.addUint8(0) #setKartingHistory 12
                datagram.addUint8(0) #setKartingHistory 13
                datagram.addUint8(0) #setKartingHistory 14
                datagram.addUint8(0) #setKartingHistory 15
                datagram.addUint8(0) #setKartingHistory 16
 
               
                datagram.addUint8(0) #setKartingTrophies 1
                datagram.addUint8(0) #setKartingTrophies 2
                datagram.addUint8(0) #setKartingTrophies 3
                datagram.addUint8(0) #setKartingTrophies 4
                datagram.addUint8(0) #setKartingTrophies 5
                datagram.addUint8(0) #setKartingTrophies 6
                datagram.addUint8(0) #setKartingTrophies 7
                datagram.addUint8(0) #setKartingTrophies 8
                datagram.addUint8(0) #setKartingTrophies 9
                datagram.addUint8(0) #setKartingTrophies 11
                datagram.addUint8(0) #setKartingTrophies 11
                datagram.addUint8(0) #setKartingTrophies 12
                datagram.addUint8(0) #setKartingTrophies 13
                datagram.addUint8(0) #setKartingTrophies 14
                datagram.addUint8(0) #setKartingTrophies 15
                datagram.addUint8(0) #setKartingTrophies 16
                datagram.addUint8(0) #setKartingTrophies 17
                datagram.addUint8(0) #setKartingTrophies 18
                datagram.addUint8(0) #setKartingTrophies 19
                datagram.addUint8(0) #setKartingTrophies 20
                datagram.addUint8(0) #setKartingTrophies 21
                datagram.addUint8(0) #setKartingTrophies 22
                datagram.addUint8(0) #setKartingTrophies 23
                datagram.addUint8(0) #setKartingTrophies 24
                datagram.addUint8(0) #setKartingTrophies 25
                datagram.addUint8(0) #setKartingTrophies 26
                datagram.addUint8(0) #setKartingTrophies 27
                datagram.addUint8(0) #setKartingTrophies 28
                datagram.addUint8(0) #setKartingTrophies 29
                datagram.addUint8(0) #setKartingTrophies 30
                datagram.addUint8(0) #setKartingTrophies 31
                datagram.addUint8(0) #setKartingTrophies 32
                datagram.addUint8(0) #setKartingTrophies 33
 
                datagram.addUint32(0) #setKartingPersonalBest 1
                datagram.addUint32(0) #setKartingPersonalBest 2
                datagram.addUint32(0) #setKartingPersonalBest 3
                datagram.addUint32(0) #setKartingPersonalBest 4
                datagram.addUint32(0) #setKartingPersonalBest 5
                datagram.addUint32(0) #setKartingPersonalBest 6
 
                datagram.addUint32(0) #setKartingPersonalBest2 1
                datagram.addUint32(0) #setKartingPersonalBest2 2
                datagram.addUint32(0) #setKartingPersonalBest2 3
                datagram.addUint32(0) #setKartingPersonalBest2 4
                datagram.addUint32(0) #setKartingPersonalBest2 5
                datagram.addUint32(0) #setKartingPersonalBest2 6
                datagram.addUint32(0) #setKartingPersonalBest2 7
                datagram.addUint32(0) #setKartingPersonalBest2 8
                datagram.addUint32(0) #setKartingPersonalBest2 9
                datagram.addUint32(0) #setKartingPersonalBest2 10
                datagram.addUint32(0) #setKartingPersonalBest2 11
                datagram.addUint32(0) #setKartingPersonalBest2 12
 
                #setKartAccessoriesOwned [16]
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
                datagram.addInt8(0)
 
                #setCogSummonsEarned
                arg = []
                datagram.addUint16(len(arg))
                for i in arg:
                    datagram.addUint8(int(i))
 
                datagram.addUint8(0) #setGardenStart
 
                #setGolfHistory [18]
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
                datagram.addUint16(0)
 
                #setPackedGolfHoleBest [18]
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
 
                #setGolfCourseBest
                datagram.addUint8(0)
                datagram.addUint8(0)
                datagram.addUint8(0)
 
                datagram.addUint8(0) #setPinkSlips
 
                datagram.addUint8(0) #setNametagStyle

                self.cw.send(datagram, connection)

               
        elif msgType == CLIENT_SET_WISHNAME:
            #print dgi
            avId = dgi.getUint16()
            unknown = dgi.getString()
            pendingName = dgi.getString()
            print pendingName
            divide = pendingName.split(' ')
            lenStr = len(divide)
            s = 0
            while s != lenStr:
                nameCheck = divide[s]
                s += 1
            with open ("TewtowBlacklist.txt", "r") as badWordFile:
                data=badWordFile.readlines()
                for word in data:
                    chrList = list(word)
                    if chrList.count('\n') == 1:
                        chrList.remove('\n')
                    badWord = ''.join(chrList)
                    if nameCheck == badWord:
                        print 'Bad name detected, are you trying to get banned?'
                        datagram = PyDatagram()
                        datagram.addUint16(CLIENT_SET_WISHNAME_RESP)
                        datagram.addUint32(avId)
                        datagram.addUint16(0)
                        datagram.addString('NO')
                        datagram.addString('NO')
                        datagram.addString('')
                        message = PyDatagram()
                        message.addUint16(CLIENT_SYSTEM_MESSAGE)
                        message.addString('Sorry, That name is not allowed.')
                        self.cw.send(message, connection)
                    else:
                        datagram = PyDatagram()
                        datagram.addUint16(CLIENT_SET_WISHNAME_RESP)
                        datagram.addUint32(avId)
                        datagram.addUint16(0)
                        datagram.addString('NO')
                        datagram.addString('')
                        datagram.addString('NO')
                        self.cw.send(datagram, connection)
 
        elif msgType == CLIENT_OBJECT_LOCATION:
            doId = dgi.getUint32()
            parentId = dgi.getUint32()
            zoneId = dgi.getUint32()
            print 'Network :: Location -> (%d, %d, %d)' % (doId, parentId, zoneId)
            if zoneId == 2000:
               
                #DistributedMickey
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(316000000) #parentId
                datagram.addUint32(2) #zoneId
                #datagram.addUint16(83)
                datagram.addUint16(65)
                datagram.addUint32(433103088)
                datagram.addString("a")
                datagram.addString("a")
                datagram.addInt16(0)
                self.cw.send(datagram, connection)
           
            if zoneId == 1000:
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(316000000) #parentId
                datagram.addUint32(2) #zoneId
                #datagram.addUint16(83)
                datagram.addUint16(108)
                datagram.addUint32(433103088)
                datagram.addString("DockedEast")
                datagram.addInt16(100)
                self.cw.send(datagram, connection)
            if zoneId == 5000:
                '''
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(316000000) #parentId
                datagram.addUint32(2) #zoneId
                datagram.addUint16(68)
                datagram.addUint32(433103088)
                datagram.addString("a")
                datagram.addString("a")
                datagram.addInt16(0)
                self.cw.send(datagram, connection)
                '''
               
        #self.cw.send(datagram, connection)
            if zoneId == 2000:
                pass
                '''#message = PyDatagram()
                #message.addUint16(CLIENT_SYSTEM_MESSAGE)
                #message.addString('Surprised? I thought so. :P')
                #self.cw.send(message, connection)
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(316000000) #parentId
                datagram.addUint32(2) #zoneId
                #datagram.addUint16(83)
                datagram.addUint16(65)
                datagram.addUint32(433103088)
                datagram.addString("b")
                datagram.addString("a")
                datagram.addInt16(0)
                self.cw.send(datagram, connection)'''
               
            if zoneId == 3000:
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_CREATE_OBJECT_REQUIRED_OTHER_RESP)
                datagram.addUint32(316000000) #parentId
                datagram.addUint32(2) #zoneId
                #datagram.addUint16(83)
                datagram.addUint16(79)
                datagram.addUint32(433103089)
                datagram.addString("a")
                datagram.addString("a")
                datagram.addInt16(0)
                self.cw.send(datagram, connection)
               
                datagram = PyDatagram()
                datagram.addUint16(CLIENT_GET_STATE_RESP)
                self.cw.send(datagram, connection)

			
        else:
            self.notify.warning('Got a datagram %d; but could not handle it.' % msgType)
예제 #33
0
	def data_process(self, datagram):
			it = PyDatagramIterator(datagram)
			message = it.getString()
			print("Processed: "+message+" from: "+str(datagram.getAddress()))
예제 #34
0
 def processServerMessage(self, netDatagram): 
     myIterator = PyDatagramIterator(netDatagram) 
     print myIterator.getString() 
예제 #35
0
파일: client.py 프로젝트: rkbeatss/mafia
 def handle_server_message(self, message: str) -> None:
     iterator = PyDatagramIterator(message)
     print(iterator.getString())
예제 #36
0
 def handle_client_message(self, message: str) -> str:
     iterator = PyDatagramIterator(message)
     return iterator.getString()
예제 #37
0
 def retrieveStringMessage(self, datagram):
     myIterator = PyDatagramIterator(datagram)
     msg = myIterator.getString()
     print msg, " received"
예제 #38
0
    def process_data(self, datagram):
        # process received data
        iterator = PyDatagramIterator(datagram)
        self.type = iterator.getString()

        if self.type == "init":
            logging.info("initializing")
            me.player_id = iterator.getUint8()
            self.num_players = iterator.getUint8()

            if self.num_players > 1:
                for _ in range(self.num_players):
                    username = iterator.getString()

                    self.player_dict[username] = Player()
                    self.player_dict[username].username = username
                    self.player_dict[username].load()
                    self.player_dict[username].position[
                        'x'] = iterator.getFloat64()
                    self.player_dict[username].position[
                        'y'] = iterator.getFloat64()
                    self.player_dict[username].position[
                        'z'] = iterator.getFloat64()
                    logging.info(f"player '{username}' initialized")
            datagram = PyDatagram()
            datagram.addString("introduce")
            datagram.addString(me.username)
            world_client.cWriter.send(datagram, world_client.conn)
            logging.debug("Send introduction")

        elif self.type == "update":
            self.num_players = iterator.getInt8()

            for _ in range(self.num_players):
                username = iterator.getString()

                if username == me.username:
                    for i in range(6):
                        iterator.getFloat64()  # TODO: Implement check
                    continue

                if username not in self.player_dict.keys():
                    self.player_dict[username] = Player(username)
                    self.player_dict[username].load()

                self.player_dict[username].position['x'] = iterator.getFloat64(
                )
                self.player_dict[username].position['y'] = iterator.getFloat64(
                )
                self.player_dict[username].position['z'] = iterator.getFloat64(
                )
                self.player_dict[username].position['h'] = iterator.getFloat64(
                )
                self.player_dict[username].position['p'] = iterator.getFloat64(
                )
                self.player_dict[username].position['r'] = iterator.getFloat64(
                )

        elif self.type == "remove":
            username = iterator.getString()
            self.player_dict[username].model.removeNode()
            del self.player_dict[username]

        elif self.type == "chat":
            self.text = iterator.getString()
            chat_reg.setText(self.text)
예제 #39
0
class PlayerReg(DirectObject): #This class will regulate the players
    def __init__(self):
        self.playerList = []
        self.numofplayers = 0
        self.win1 = None
        
    
    def ProcessData(self,datagram, m,chatClass):
        #process received data
        self.iterator = PyDatagramIterator(datagram)
        self.type = self.iterator.getString()
        if (self.type == "init"):
            print "initializing"
            #initialize
            m.setPlayerNum(self.iterator.getUint8())
            self.num = self.iterator.getUint8()
            for i in range(self.num):
                if (i != m.playernum):
                    self.playerList.append(Player())
                    self.playerList[i].username = self.iterator.getString()
                    self.playerList[i].load()
                    self.playerList[i].currentPos['x'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos['y'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos['z'] = self.iterator.getFloat64()
                    print "player ", str(i), " initialized"
                else:
                    self.playerList.append(Player())
            self.numofplayers = self.num
            print 'draw new'
            self.win1.queue_draw()
            
        if (self.type == "update"):
            self.num = self.iterator.getUint8()
            if (self.num > self.numofplayers):
                for i in range(self.numofplayers):
                    self.playerList[i].currentPos['x'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos['y'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos['z'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos['h'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos['p'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos['r'] = self.iterator.getFloat64()
                for i in range(self.numofplayers,self.num):
                    if (i != m.playernum):
                        self.playerList.append(Player())
                        self.playerList[i].load()
                        self.playerList[i].currentPos['x'] = self.iterator.getFloat64()
                        self.playerList[i].currentPos['y'] = self.iterator.getFloat64()
                        self.playerList[i].currentPos['z'] = self.iterator.getFloat64()
                        self.playerList[i].currentPos['h'] = self.iterator.getFloat64()
                        self.playerList[i].currentPos['p'] = self.iterator.getFloat64()
                        self.playerList[i].currentPos['r'] = self.iterator.getFloat64()
                    else:
                        self.playerList.append(Player())
                self.numofplayers = self.num
            else:
                for i in range(self.numofplayers):
                    self.playerList[i].currentPos['x'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos['y'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos['z'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos['h'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos['p'] = self.iterator.getFloat64()
                    self.playerList[i].currentPos['r'] = self.iterator.getFloat64()
        if (self.type == "chat"):
            self.text = self.iterator.getString()
            chatClass.setText(self.text)
       
    def updatePlayers(self,m):
        
        if (self.numofplayers != 0):
            for k in range(self.numofplayers):
                #As long as the player is not the client put it where the server says
                if(k != m.playernum):
                    self.playerList[k].model.setPosHpr(self.playerList[k].currentPos['x'],self.playerList[k].currentPos['y'],self.playerList[k].currentPos['z'],self.playerList[k].currentPos['h'],self.playerList[k].currentPos['p'],self.playerList[k].currentPos['r'])
        return Task.cont
예제 #40
0
 def processMsgData(self, dataGram):
     iterator = PyDatagramIterator(dataGram)
     msgID = iterator.getUint8()
     if msgID == PRINT_MESSAGE:
         msg = iterator.getString()
         print msg
예제 #41
0
 def processData(self, netDatagram):
     myIterator = PyDatagramIterator(netDatagram)
     return self.decode(myIterator.getString())
예제 #42
0
class Server(QueuedConnectionManager):
    """Handles new connections and the incomming of packages"""
    def __init__(self, p, b):
        self.cManager = QueuedConnectionManager()
        self.cListener = QueuedConnectionListener(self.cManager, 0)
        self.cReader = QueuedConnectionReader(self.cManager, 0)
        self.cWriter = ConnectionWriter(self.cManager, 0)
        self.port = p
        self.backlog = b
        self.socket = self.cManager.openTCPServerRendezvous(
            self.port, self.backlog)
        self.cListener.addConnection(self.socket)
        self.player_list = []
        self.iterator = None
        self.num_count = self.active_players = self.Δt_update = self.Δt = 0

    def reader_polling_task(self, arg):
        if self.cReader.dataAvailable():
            datagram = NetDatagram()

            if self.cReader.getData(datagram):
                self.process_data(datagram.getConnection(), datagram)

        return Task.cont

    def listener_polling_task(self, arg):
        if self.cListener.newConnectionAvailable():
            rendezvous = PointerToConnection()
            net_address = NetAddress()
            new_connection = PointerToConnection()
            if self.cListener.getNewConnection(rendezvous, net_address,
                                               new_connection):
                self.active_players += 1
                new_connection = new_connection.p()
                self.player_list.append(player(self.num_count))
                find_player(self.player_list, "player_id",
                            self.num_count).conn_id = new_connection
                logging.debug(self.active_players)
                self.initialize_player()
                self.num_count += 1
                self.cReader.addConnection(
                    new_connection)  # Begin reading connection
                logging.info('connection received')
        return Task.cont

    def initialize_player(self):
        conn = self.player_list[-1].conn_id

        datagram = PyDatagram()
        datagram.addString("init")
        newest = self.player_list[-1].player_id
        datagram.addUint8(newest)
        logging.debug(
            f"{self.active_players} players and {newest} is the newest player")
        datagram.addUint8(self.active_players)

        if len(self.player_list) > 1:
            for k in self.player_list:
                datagram.addString(k.username)
                datagram.addFloat64(k.pos_and_or['x'])
                datagram.addFloat64(k.pos_and_or['y'])
                datagram.addFloat64(k.pos_and_or['z'])

        self.cWriter.send(datagram, conn)

    def update_positions(self, data):  # send
        self.Δt = globalClock.getDt()
        self.Δt_update += self.Δt
        if self.Δt_update > 0.05:
            if self.active_players > 1:
                datagram = PyDatagram()
                datagram.addString("update")
                datagram.addInt8(self.active_players)

                for p in self.player_list:
                    datagram.addString(p.username)
                    datagram.addFloat64(p.pos_and_or['x'])
                    datagram.addFloat64(p.pos_and_or['y'])
                    datagram.addFloat64(p.pos_and_or['z'])
                    datagram.addFloat64(p.pos_and_or['h'])
                    datagram.addFloat64(p.pos_and_or['p'])
                    datagram.addFloat64(p.pos_and_or['r'])

                for p in self.player_list:
                    self.cWriter.send(datagram, p.conn_id)
            self.Δt_update = 0
        return Task.cont

    def update_chat(self, msg):
        datagram = PyDatagram()

        datagram.addString("chat")
        datagram.addString(msg)

        logging.info(f"{msg}")  # TODO make this useful
        for p in self.player_list:
            self.cWriter.send(datagram, p.conn_id)

    def process_data(self, connection, datagram):
        self.iterator = PyDatagramIterator(datagram)
        msg_type = self.iterator.getString()

        if msg_type == "position":
            self.process_position(connection)
        elif msg_type == "chat":
            self.update_chat(self.iterator.getString())
        elif msg_type == "introduce":
            username = self.iterator.getString()
            logging.info(f"User {username} introduced himself")
            cls = find_player(self.player_list, "conn_id", connection)
            cls.username = username
        elif msg_type == "quit":
            self.process_quit()

    def process_position(self, connection):
        it = self.iterator
        pos_and_or = find_player(self.player_list, "conn_id",
                                 connection).pos_and_or
        pos_and_or['x'] = it.getFloat64()
        pos_and_or['y'] = it.getFloat64()
        pos_and_or['z'] = it.getFloat64()
        pos_and_or['h'] = it.getFloat64()
        pos_and_or['p'] = it.getFloat64()
        pos_and_or['r'] = it.getFloat64()

    def process_quit(self):
        logging.debug("Player has quit")
        self.active_players -= 1

        player_num = self.iterator.getInt8()
        player_cls = find_player(self.player_list, "player_id", player_num)
        player_id = self.player_list.index(player_cls)
        player_name = player_cls.username
        del self.player_list[player_id]

        datagram = PyDatagram()
        datagram.addString("remove")
        datagram.addString(player_name)

        for p in self.player_list:
            self.cWriter.send(datagram, p.conn_id)

        logging.info(f"Player {player_name} has left the game")
예제 #43
0
파일: kickern.py 프로젝트: relet/netkickern
def myProcessDataFunction(datagram):
  global status, P1NAME, P2NAME, lastResetRequest
  global MY_POSITION, kicker, texKicker, texKicker2, mode

  if (role==ROLE_SERVER):
    sender = activeConnections.index(datagram.getConnection()) 
  data = PyDatagramIterator(datagram)
  #try:
  if True: #just to keep the indent, in case we need "try" again. 
    pktType = data.getUint16()
    if role==ROLE_SERVER: # packets received only by server
      if pktType==PACKET_MOVE:
        setOpponentMove(data, sender+1)
      elif pktType==PACKET_MSG:
        timer = data.getUint16()
        msg   = data.getString()
        sendMessage(msg, timer) #broadcast to all
      elif pktType==PACKET_HELLO:
        magic = data.getString()
        proto = data.getUint16()
        soft  = data.getString()
        if magic != MAGIC_WORD:
          print "Connecting party did not identify as netkickern client."
          sys.exit(1)
        if proto != PROTOCOL_VERSION:
          print "Connecting party used incompatible protocol version "+str(proto)+"."
          print "We are using "+str(PROTOCOL_VERSION)+"."
          sys.exit(1)
        if soft != SOFTWARE_VERSION:
          print "WARNING: Client is using software "+soft+"."
        print "Ok, client "+str(sender+1)+" connected."
        status = STATUS_INIT
        qpref = PyDatagram() #query for client preferences
        qpref.addUint16(PACKET_QPREF)
        qpref.addString(SOFTWARE_VERSION)
        cWriter.send(qpref, activeConnections[sender])
      elif pktType==PACKET_PREF:
        if status != STATUS_INIT:
          return
        prefs = {}
        teamname = data.getString()
        prefs['team']=teamname
        place = -1
        if (mode == MODE_4P):
          #assign the last free position, and P1 only if the teamname matches or everything else is given away
          if not POSITION[3]:
            place = 3
          if not POSITION[2]:
            place = 2
          if (teamname == TEAMNAME) or (place==-1):
            if not POSITION[1]:
              place = 1
          print "placed player ", sender+1, " at position ", place
          POSITION[place]=sender+1
          prefs['pos'] = place
        playerPrefs[sender]=prefs
        if (mode == MODE_2P) or (0 in playerPrefs and 1 in playerPrefs and 2 in playerPrefs):
          P1NAME = TEAMNAME
          P2NAME = playerPrefs[0]['team']
          rename = PyDatagram() 
          rename.addUint16(PACKET_NAME)
          rename.addString(P1NAME) 
          rename.addString(P2NAME) 
          toAll(rename, activeConnections)
          if (mode == MODE_4P): #inform players of the position they play in
            for i in range(0,3):
              placing = PyDatagram()
              placing.addUint16(PACKET_PLACE)
              placing.addUint16(playerPrefs[i]['pos'])
              cWriter.send(placing, activeConnections[i])
          resetNames()
          welcome = PyDatagram()
          welcome.addUint16(PACKET_START)
          toAll(welcome, activeConnections)
          startGame()
      elif pktType==PACKET_PONG:
        stime = data.getFloat64()
        now = time.time()
        deltatime = now-stime   # TODO: use this to delay mouse movements by avg(deltatime)/2
        print "player "+str(sender)+" network delay: "+str(deltatime*500)+"ms " #rtt/2
      elif pktType==PACKET_RESET:
        lastResetRequest = time.time()
        playerPrefs[sender]['lastReset']=lastResetRequest
        if not isResetConfirmed():
          resetRequest=PyDatagram() #forward to all clients 
          resetRequest.addUint16(PACKET_RESET)
          #resetRequest.addUint16(sender) # TODO: tell everyone which player sent the request
          toAll(resetRequest, activeConnections) 
          setMessage("Player "+str(sender+1)+" wishes to reset the ball.\nPress Space to confirm.", 3)
    else: # packets received only by clients
      if pktType==PACKET_SET:
        setGameStatus(data)
      elif pktType==PACKET_SCORE:
        setScore(data)
      elif pktType==PACKET_QPREF:
        soft = data.getString()
        if soft != SOFTWARE_VERSION:
          print "WARNING: Server is using software "+soft+"."
        status = STATUS_INIT
        pref = PyDatagram()
        pref.addUint16(PACKET_PREF)
        pref.addString(TEAMNAME)
        cWriter.send(pref, serverConnection)     
      elif pktType==PACKET_START:
        print "connection to game host confirmed."
        startGame()
      elif pktType==PACKET_MSG:
        timer = data.getUint16()
        msg   = data.getString()
        setMessage(msg, timer)
      elif pktType==PACKET_NAME:
        P1NAME = data.getString()
        P2NAME = data.getString()
        resetNames()
      elif pktType==PACKET_PLACE: #4P only
        MY_POSITION = data.getUint16()
        mode = MODE_4P
        resetGameColours(kicker, texKicker, texKicker2)  
      elif pktType==PACKET_PING:
        stime = data.getFloat64()
        pong = PyDatagram()
        pong.addUint16(PACKET_PONG)
        pong.addFloat64(stime)
        cWriter.send(pong, serverConnection)
      elif pktType==PACKET_RESET:
        setMessage("Another wishes to reset the ball.\nPress Space to confirm.", 3)
  #except Exception, e:
  #  print e 
  #  sys.exit(1) #wow, this is what I call exception handling.. 
  return
예제 #44
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)
예제 #45
0
class MyApp(ShowBase):
    uname = None

    def __init__(self):
        ShowBase.__init__(self)

        self.cManager = QueuedConnectionManager()
        self.cListener = QueuedConnectionListener(self.cManager, 0)
        self.cReader = QueuedConnectionReader(self.cManager, 0)
        self.cWriter = ConnectionWriter(self.cManager, 0)

        host = "localhost"
        port = 6002
        self.connection = self.cManager.openTCPClientConnection(
            host, port, 10000)

        self.received = 1

        if self.connection:
            self.cReader.addConnection(self.connection)
            #taskMgr.add(self.updateRoutine, 'updateRoutine')

            # LOGIN Request Starts
            self.uname = raw_input('Enter username :'******'Enter password :'******'Login')
            if (self.received):
                print "->Client request:"
        # Send a request to the server

            myPyDatagram101 = PyDatagram()
            prot = 101
            myPyDatagram101.addUint16(prot)
            myPyDatagram101.addString(self.uname)
            myPyDatagram101.addString(self.password)
            self.cWriter.send(myPyDatagram101, self.connection)
            self.received = 0
            taskMgr.add(self.receiveResponse101, 'Login')

    def sendRequest101(self):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram101 = PyDatagram()
        prot = 101
        myPyDatagram101.addUint16(prot)
        myPyDatagram101.addString(self.uname)
        myPyDatagram101.addString(self.password)
        self.cWriter.send(myPyDatagram101, self.connection)
        self.received = 0

    def receiveResponse101(self, task):

        while self.cReader.dataAvailable():
            datagram = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram):
                self.myIterator = PyDatagramIterator(datagram)
                print "<-Server response:"
                print self.myIterator.getUint16()
                self.msg = self.myIterator.getUint32()
                self.l = self.myIterator.getUint32()
                if self.msg is not None:
                    if self.l is not 0:
                        for x in range(0, self.l):
                            print self.myIterator.getString()
                            print self.myIterator.getUint32()
                            print self.myIterator.getUint32()

                    print self.msg, " received"
                    #raw_input("Press Enter to continue...")

                    self.received = 0
                    taskMgr.remove('Login')

                    #1-Character creatopm
                    #taskMgr.add(self.sendRequest104, 'CharacterCreation')

                    #2-heartbeat of playgame after login
                    MyApp.sendRequest113(self)
        return task.again

# LOGIN Request End

        # CHARACTER CREATION Starts

    def sendRequest104(self, task):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram = PyDatagram()
        prot = 104
        cname = raw_input('Character Name :')
        faction_id_104 = raw_input('press 0 for Red Or 1 for Blue ? :')
        classType_104 = raw_input('press 0 for Axe Or 1 for Sword ? :')
        myPyDatagram.addUint16(prot)
        myPyDatagram.addString(cname)
        myPyDatagram.addUint32(faction_id_104)
        myPyDatagram.addUint32(classType_104)
        self.cWriter.send(myPyDatagram, self.connection)

        print "104 sent"
        self.received = 0
        taskMgr.add(self.receiveResponse104, "characterresponse")

    def receiveResponse104(self, task):

        while self.cReader.dataAvailable():
            datagram = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram):
                self.myIterator1 = PyDatagramIterator(datagram)
                print '------'
                print self.myIterator1.getUint16()
                self.msg = self.myIterator1.getUint32()
                if self.msg is not None:
                    print "<-Server response:"
                    print self.msg, " received"
                    raw_input("Press Enter to continue...")
                    self.received = 0
                    taskMgr.remove('CharacterCreation')
                    taskMgr.add(self.sendRequest106, 'move')

        return task.again

        #CHARACTER CREATION Ends

    # Move Starts
    def sendRequest106(self, task):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram106 = PyDatagram()
        prot = 106
        xpos = raw_input('X Position :')
        ypos = raw_input('Y Position :')
        zpos = raw_input('Z Position :')
        hpos = raw_input('Heading (0 to 360):')
        ismoving = raw_input('Moving ? -- 0 for NO , 1 for YES :')
        myPyDatagram106.addUint16(prot)
        myPyDatagram106.addUint32(xpos)
        myPyDatagram106.addUint32(ypos)
        myPyDatagram106.addUint32(zpos)
        myPyDatagram106.addUint32(hpos)
        myPyDatagram106.addUint32(ismoving)
        self.cWriter.send(myPyDatagram106, self.connection)

        self.received = 0
        taskMgr.add(self.receiveResponse106, "characterresponse")

    def receiveResponse106(self, task):
        while self.cReader.dataAvailable():
            datagram6 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram6):

                myIterator = PyDatagramIterator(datagram6)
                print myIterator.getUint16()

                msg = myIterator.getString()

                if msg is not None:
                    print "<-Server response:"
                    print msg
                    print myIterator.getUint32()
                    print myIterator.getUint32()
                    print myIterator.getUint32()
                    print myIterator.getUint32()
                    print myIterator.getUint32()
                    raw_input("Press Enter to continue...")
                    self.received = 1
                    # Attack
                    #raw_input("Press Enter to continue...")
                    taskMgr.add(self.sendRequest108, 'health')
        return task.again
        #Move Ends

    #Change Health Starts
    def sendRequest108(self, task):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram108 = PyDatagram()
        prot = 108
        change_Health = raw_input('Change in health (-100 to 100):')
        myPyDatagram108.addUint16(prot)
        myPyDatagram108.addUint32(change_Health)
        self.cWriter.send(myPyDatagram108, self.connection)

        self.received = 0
        taskMgr.add(self.receiveResponse108, "healthresponse")

    def receiveResponse108(self, task):

        while self.cReader.dataAvailable():
            datagram8 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram8):
                myIterator = PyDatagramIterator(datagram8)
                print myIterator.getUint16()
                msg = myIterator.getString()

                if msg is not None:
                    print "<-Server response:"
                    print msg
                    print myIterator.getUint32()
                    self.received = 1
                    # CP State
                    raw_input("Press Enter to continue...")
                    taskMgr.add(self.sendRequest107, 'attack')
        #Change Health Ends
        return task.again

    # Attack Starts
    def sendRequest107(self, task):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram107 = PyDatagram()
        prot = 107
        attackId = raw_input('Attack Id (0 or 1):')
        myPyDatagram107.addUint16(prot)
        myPyDatagram107.addUint32(attackId)
        self.cWriter.send(myPyDatagram107, self.connection)

        #print " sent"
        self.received = 0
        taskMgr.add(self.receiveResponse108, "attackresponse")

    def receiveResponse107(self, task):

        while self.cReader.dataAvailable():
            datagram7 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram7):
                myIterator = PyDatagramIterator(datagram7)
                print myIterator.getUint16()
                msg = myIterator.getString()

                if msg is not None:
                    print "<-Server response:"
                    print msg
                    print myIterator.getUint32()
                    raw_input("Press Enter to continue...")
                    self.received = 1
                    # Change Health
                    taskMgr.add(self.sendRequest112, 'CP Capture')
        return task.again
        #Attack Ends

    #CP Capture Starts
    def sendRequest112(self, task):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram112 = PyDatagram()
        prot = 112
        CP_id = raw_input('Control Point ID (1 to 5): ')
        faction_id = raw_input('press 0 for Red Or 1 for Blue ? :')
        myPyDatagram112.addUint16(prot)
        myPyDatagram112.addUint32(CP_id)
        myPyDatagram112.addUint32(faction_id)
        self.cWriter.send(myPyDatagram112, self.connection)

        #print " sent"
        self.received = 0
        taskMgr.add(self.receiveResponse112, "CPCaptureRes")

    def receiveResponse112(self, task):

        while self.cReader.dataAvailable():
            datagram12 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram12):
                myIterator = PyDatagramIterator(datagram12)
                print myIterator.getUint16()
                msg = myIterator.getUint32()

                if msg is not None:
                    print "<-Server response:"
                    print msg
                    print myIterator.getUint32()
                    raw_input("Press Enter to continue...")
                    self.received = 1
#HeartBeat
                    #raw_input("Press Enter to continue...")
                    #taskMgr.add(self.communicate105, 'chat')

        #CP Capture Ends

    # CHAT Starts
    def communicate105(self, task):
        #print "communicate"
        self.sendRequest105()
        self.receiveResponse105(task)
        return task.again

    def sendRequest105(self):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram105 = PyDatagram()
        prot = 105
        chat = raw_input('Insert Chat Message :')
        myPyDatagram105.addUint16(prot)
        myPyDatagram105.addString(chat)
        self.cWriter.send(myPyDatagram105, self.connection)

        print " sent"
        self.received = 0

    def receiveResponse105(self, task):
        print "<-Server response:"
        while self.cReader.dataAvailable():
            datagram5 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram5):
                myIterator = PyDatagramIterator(datagram5)
                print myIterator.getUint16()
                msg = myIterator.getUint16()
                print msg, " received"
                if msg is not None:
                    raw_input("Press Enter to continue...")
                    self.received = 1
                    # Move
                    raw_input("Press Enter to continue...")
                    taskMgr.add(self.communicate111, 'CP state')

        #CHAT Ends

    #CP State Starts
    def communicate111(self, task):
        #print "communicate"
        self.sendRequest111()
        self.receiveResponse111(task)
        return task.again

    def sendRequest111(self):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram111 = PyDatagram()
        prot = 111
        CP_id = raw_input('Control Point ID (1 to 5): ')
        CP_state = raw_input('Control Point state (1 red, 2 blue, 3 purple): ')
        myPyDatagram111.addUint16(prot)
        myPyDatagram111.addUint16(CP_id)
        myPyDatagram111.addUint16(CP_state)
        self.cWriter.send(myPyDatagram111, self.connection)

        print " sent"
        self.received = 0

    def receiveResponse111(self, task):
        print "<-Server response:"
        while self.cReader.dataAvailable():
            datagram11 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram11):
                myIterator = PyDatagramIterator(datagram11)
                print myIterator.getUint16()
                msg = myIterator.getUint16()
                print msg, " received"
                if msg is not None:
                    raw_input("Press Enter to continue...")
                    self.received = 1
                    # CP Capture
                    raw_input("Press Enter to continue...")
                    taskMgr.add(self.communicate102, 'Logout')
        #CP State Ends

    # LOGOUT Starts
    def communicate102(self, task):
        #print "communicate"
        self.sendRequest102()
        self.receiveResponse102(task)
        return task.again

    def sendRequest102(self):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram102 = PyDatagram()
        prot = 102
        myPyDatagram102.addUint16(prot)
        self.cWriter.send(myPyDatagram102, self.connection)

        print " sent"
        self.received = 0

    def receiveResponse102(self, task):
        print "<-Server response:"
        while self.cReader.dataAvailable():
            datagram2 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram2):
                myIterator = PyDatagramIterator(datagram2)
                print myIterator.getUint16()
                msg = myIterator.getUint16()
                print msg, " received"
                if msg is not None:
                    raw_input("Press Enter to continue...")
                    self.received = 1
                    # Register
                    raw_input("Press Enter to continue...")
                    taskMgr.add(self.communicate301, 'Heartbeat')

        #LOGOUT Ends

        #HeartBeat Starts
    def communicate301(self):
        #print "communicate"
        self.sendRequest301()
        self.receiveResponse301()

#return task.again;

    def sendRequest301(self, task):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram301 = PyDatagram()
        prot = 301
        myPyDatagram301.addUint16(prot)
        self.cWriter.send(myPyDatagram301, self.connection)
        self.received = 0
        return task.again

    def receiveResponse301(self):

        while self.cReader.dataAvailable():
            datagram301 = NetDatagram()
            # Retrieve the contents of the datagram.
            if self.cReader.getData(datagram301):
                myIterator = PyDatagramIterator(datagram301)
                p = myIterator.getUint16()
                if p == 213:
                    un = myIterator.getString()
                    cname = myIterator.getString()
                    ctype = myIterator.getUint32()
                    cteam = myIterator.getUint32()
                    if un == MyApp.uname:
                        abc = 'abc'
                    else:
                        print cname + ' just joined a game......!! hurray'

                    #print msg, " received"

                    self.received = 1

        #HeartBeat Ends

    #heartbeat
    def sendRequest113(self):
        if (self.received):
            print "->Client request:"
            # Send a request to the server

        myPyDatagram113 = PyDatagram()
        prot = 113
        myPyDatagram113.addUint16(prot)
        print MyApp.uname + '-------'
        if MyApp.uname == 'chintan':
            myPyDatagram113.addUint32(18)
        elif MyApp.uname == 'paras':
            myPyDatagram113.addUint32(35)
        else:
            myPyDatagram113.addUint32(3)
        self.cWriter.send(myPyDatagram113, self.connection)
        self.received = 0
        #taskMgr.add(self.updateRoutine,'update113')
        #taskMgr.doMethodLater(1,self.sendRequest301,'HeatBeat')
        MyApp.retrieve113(self)

    def retrieve113(self):
        taskMgr.add(self.updateRoutine, 'update113')
        taskMgr.doMethodLater(1, self.sendRequest301, 'HeatBeat')

    def updateRoutine(self, task):
        self.receiveResponse301()
        return task.again
예제 #46
0
class PlayerReg(DirectObject):
    """Regulate player positions"""
    def __init__(self):
        self.iterator = None
        self.player_dict = {}
        self.players = []
        self.num_players = 0
        self.type = ""

    def process_data(self, datagram):
        assert datagram
        self.iterator = PyDatagramIterator(datagram)
        self.type = self.iterator.getString()

        if self.type == "init":
            self.process_init()
        elif self.type == "update":
            self.process_update()
        elif self.type == "remove":
            self.process_remove()
        elif self.type == "chat":
            self.process_chat()
        else:
            logging.warning("Datagram not recognized")

    def process_init(self):
        it = self.iterator

        logging.info("initializing")
        me.player_id = it.getUint8()
        self.num_players = it.getUint8()

        if self.num_players > 1:
            for _ in range(self.num_players):
                username = it.getString()

                self.player_dict[username] = Player()
                self.player_dict[username].username = username
                self.player_dict[username].load()
                self.player_dict[username].position['x'] = it.getFloat64()
                self.player_dict[username].position['y'] = it.getFloat64()
                self.player_dict[username].position['z'] = it.getFloat64()
                logging.info(f"player '{username}' initialized")
        datagram = PyDatagram()
        datagram.addString("introduce")
        datagram.addString(me.username)
        world_client.cWriter.send(datagram, world_client.conn)
        logging.debug("Send introduction")

    def process_update(self):
        it = self.iterator
        self.num_players = it.getInt8()

        for _ in range(self.num_players):
            username = it.getString()

            if username == me.username:
                for i in range(6):
                    it.getFloat64()  # TODO: Implement check
                continue

            if username not in self.player_dict.keys():
                self.player_dict[username] = Player(username)
                self.player_dict[username].load()

            self.player_dict[username].position['x'] = it.getFloat64()
            self.player_dict[username].position['y'] = it.getFloat64()
            self.player_dict[username].position['z'] = it.getFloat64()
            self.player_dict[username].position['h'] = it.getFloat64()
            self.player_dict[username].position['p'] = it.getFloat64()
            self.player_dict[username].position['r'] = it.getFloat64()

    def process_remove(self):
        username = self.iterator.getString()
        self.player_dict[username].model.removeNode()
        del self.player_dict[username]

    def process_chat(self):
        self.text = self.iterator.getString()
        chat_reg.setText(self.text)

    def update_players(self, arg):
        if self.num_players != 0:
            for k in self.player_dict.keys():
                # As long as the player is not the client put it where the server says
                if k != me.username:
                    self.player_dict[k].model.setPosHpr(self.player_dict[k].position['x'],
                                                        self.player_dict[k].position['y'],
                                                        self.player_dict[k].position['z'],
                                                        self.player_dict[k].position['h'],
                                                        self.player_dict[k].position['p'],
                                                        self.player_dict[k].position['r'])
        return Task.cont
예제 #47
0
class PlayerReg(DirectObject): #This class will hold anything that is related to regulating clients
    def __init__(self):
        self.PlayerList = []
        self.active = 0
        self.timeSinceLastUpdate = 0
        self.elapsed = 0
    
    def updatePlayers(self,serverClass,data,type):
        if (type == "positions"):
            #keep players updated on their position
            #self.elapsed = globalClock.getDt()
            self.elapsed = 0.0001
            self.timeSinceLastUpdate += self.elapsed
            if (self.timeSinceLastUpdate > 0.1):
                self.timeSinceLastUpdate = 0
                if (self.active):
                    self.datagram = PyDatagram()
                    self.datagram.addString("update")
                    #add the number of players
                    self.datagram.addFloat64(self.active)
                    #add every players current position
                    for k in range(self.active):
                        self.datagram.addFloat64(self.PlayerList[k].currentPos['x'])
                        self.datagram.addFloat64(self.PlayerList[k].currentPos['y'])
                        self.datagram.addFloat64(self.PlayerList[k].currentPos['z'])
                        self.datagram.addFloat64(self.PlayerList[k].currentPos['h'])
                        self.datagram.addFloat64(self.PlayerList[k].currentPos['p'])
                        self.datagram.addFloat64(self.PlayerList[k].currentPos['r'])
                    for k in self.PlayerList:
                        self.conn = k.connectionID
                        serverClass.cWriter.send(self.datagram,self.conn)
                
            return Task.cont
        
        if(type == "chat"):
            #Keep players up to date with all the chat thats goin on
            self.iterator = data
            self.datagram = PyDatagram()
            self.datagram.addString("chat")
            self.text = self.iterator.getString()
            self.datagram.addString(self.text)
            print self.text,' ',str(serverClass)
            for k in self.PlayerList:
                serverClass.cWriter.send(self.datagram,k.connectionID)
                
                
        
    def updateData(self,connection, datagram,serverClass):
        self.iterator = PyDatagramIterator(datagram)
        self.type = self.iterator.getString()
        if (self.type == "positions"):
            for k in self.PlayerList:
                if (k.connectionID == connection):
                    k.currentPos['x'] = self.iterator.getFloat64()
                    k.currentPos['y'] = self.iterator.getFloat64()
                    k.currentPos['z'] = self.iterator.getFloat64()
                    k.currentPos['h'] = self.iterator.getFloat64()
                    k.currentPos['p'] = self.iterator.getFloat64()
                    k.currentPos['r'] = self.iterator.getFloat64()
        if (self.type == "chat"):
            self.updatePlayers(serverClass,self.iterator,"chat")
    
    def sendInitialInfo(self,i,server): #Initialize the new Player
        self.con = self.PlayerList[i].connectionID #set the connection to the player's connection
        self.datagram = PyDatagram() #create a datagram instance
        self.datagram.addString("init") #specify to the client that this is an init type packet
        self.datagram.addUint8(self.active) #specify the player's number (not sure why this is here)
        self.datagram.addFloat64(i) #specify number of players (same as player's number)
        for k in self.PlayerList: #Add the current position of everyone in the game world and send it
            self.datagram.addString(k.username)
            self.datagram.addFloat64(k.currentPos['x'])
            self.datagram.addFloat64(k.currentPos['y'])
            self.datagram.addFloat64(k.currentPos['z'])
        server.cWriter.send(self.datagram,self.con)
예제 #48
0
class MyApp(ShowBase):
	uname = None
	def __init__(self):
		ShowBase.__init__(self)
		
		self.cManager = QueuedConnectionManager()
		self.cListener = QueuedConnectionListener(self.cManager, 0)
		self.cReader = QueuedConnectionReader(self.cManager, 0)
		self.cWriter = ConnectionWriter(self.cManager, 0)
               
		
		host = "localhost";
    	        port = 6002;
		self.connection = self.cManager.openTCPClientConnection(host, port, 10000)
		
		self.received = 1
		
		if self.connection:
                	self.cReader.addConnection(self.connection)                	
			#taskMgr.add(self.updateRoutine, 'updateRoutine')
                       
                        # LOGIN Request Starts        
                        self.uname = raw_input('Enter username :'******'Enter password :'******'Login')
			if(self.received):
				print "->Client request:"
			# Send a request to the server
		
			myPyDatagram101 = PyDatagram()
			prot = 101
			myPyDatagram101.addUint16(prot)
			myPyDatagram101.addString(self.uname)
			myPyDatagram101.addString(self.password)
			self.cWriter.send(myPyDatagram101,self.connection)	
			self.received = 0
                        taskMgr.add(self.receiveResponse101,'Login')
                       
        def sendRequest101(self):
		if(self.received):
			print "->Client request:"
			# Send a request to the server
		
		myPyDatagram101 = PyDatagram()
		prot = 101
		myPyDatagram101.addUint16(prot)
		myPyDatagram101.addString(self.uname)
		myPyDatagram101.addString(self.password)
		self.cWriter.send(myPyDatagram101,self.connection)	
		self.received = 0
        
	def receiveResponse101(self,task):
		
		while self.cReader.dataAvailable():
			datagram = NetDatagram()
			# Retrieve the contents of the datagram.
			if self.cReader.getData(datagram):
				self.myIterator = PyDatagramIterator(datagram)
                                print "<-Server response:"
				print self.myIterator.getUint16()
				self.msg = self.myIterator.getUint32()
				self.l = self.myIterator.getUint32()
                                if self.msg is not None:
				    if self.l is not 0:
					for x in range(0,self.l):
						print self.myIterator.getString()
						print self.myIterator.getUint32()
						print self.myIterator.getUint32()
							
				    print self.msg, " received"
                                    #raw_input("Press Enter to continue...")
				    
                                    self.received = 0
				    taskMgr.remove('Login')
				   
				    #1-Character creatopm
				    #taskMgr.add(self.sendRequest104, 'CharacterCreation')
				    
				    #2-heartbeat of playgame after login
				    MyApp.sendRequest113(self)
		return task.again               	
		   	            
                # LOGIN Request End        
                              
			      
		# CHARACTER CREATION Starts
	
        def sendRequest104(self,task):
		if(self.received):
			print "->Client request:"
			# Send a request to the server
		
		myPyDatagram = PyDatagram()
		prot = 104
		cname = raw_input('Character Name :')
		faction_id_104 = raw_input('press 0 for Red Or 1 for Blue ? :')
   		classType_104 = raw_input('press 0 for Axe Or 1 for Sword ? :')
		myPyDatagram.addUint16(prot)
		myPyDatagram.addString(cname)
		myPyDatagram.addUint32(faction_id_104)
		myPyDatagram.addUint32(classType_104)		
		self.cWriter.send(myPyDatagram,self.connection)	
					
		print "104 sent"
		self.received = 0
                taskMgr.add(self.receiveResponse104,"characterresponse")
        
	def receiveResponse104(self,task):
		
		while self.cReader.dataAvailable():
			datagram = NetDatagram()
			# Retrieve the contents of the datagram.
			if self.cReader.getData(datagram):
				self.myIterator1 = PyDatagramIterator(datagram)
				print '------'
                                print self.myIterator1.getUint16()
                                self.msg = self.myIterator1.getUint32()
                                if self.msg is not None:
				    print "<-Server response:"
				    print self.msg, " received"
                                    raw_input("Press Enter to continue...")
                                    self.received = 0
				    taskMgr.remove('CharacterCreation')
				    taskMgr.add(self.sendRequest106, 'move')
				
	        return task.again
				
				
					
		#CHARACTER CREATION Ends
        
	
	# Move Starts    	
        def sendRequest106(self,task):
		if(self.received):
			print "->Client request:"
			# Send a request to the server
		
		myPyDatagram106 = PyDatagram()
		prot = 106
		xpos = raw_input('X Position :')
		ypos = raw_input('Y Position :')
    		zpos = raw_input('Z Position :')
    		hpos = raw_input('Heading (0 to 360):')
		ismoving = raw_input('Moving ? -- 0 for NO , 1 for YES :')
		myPyDatagram106.addUint16(prot)
		myPyDatagram106.addUint32(xpos)
		myPyDatagram106.addUint32(ypos)
		myPyDatagram106.addUint32(zpos)
		myPyDatagram106.addUint32(hpos)
		myPyDatagram106.addUint32(ismoving)
		self.cWriter.send(myPyDatagram106,self.connection)	
					
		self.received = 0
                taskMgr.add(self.receiveResponse106,"characterresponse")
        
	def receiveResponse106(self,task):	
		while self.cReader.dataAvailable():
			datagram6 = NetDatagram()
			# Retrieve the contents of the datagram.
			if self.cReader.getData(datagram6):
				
				myIterator = PyDatagramIterator(datagram6)
                                print myIterator.getUint16()
				
                                msg = myIterator.getString()
                                
                                if msg is not None:
				    print "<-Server response:"
				    print msg
				    print myIterator.getUint32()
				    print myIterator.getUint32()
				    print myIterator.getUint32()
				    print myIterator.getUint32()
				    print myIterator.getUint32()
                                    raw_input("Press Enter to continue...")
                                    self.received = 1
				    # Attack
				    #raw_input("Press Enter to continue...") 
				    taskMgr.add(self.sendRequest108, 'health')
		return task.again				    
		#Move Ends
        
	#Change Health Starts
        def sendRequest108(self,task):
		if(self.received):
			print "->Client request:"
			# Send a request to the server
		
		myPyDatagram108 = PyDatagram()
		prot = 108
		change_Health = raw_input('Change in health (-100 to 100):')
		myPyDatagram108.addUint16(prot)
		myPyDatagram108.addUint32(change_Health)
		self.cWriter.send(myPyDatagram108,self.connection)	
					
		self.received = 0
                taskMgr.add(self.receiveResponse108,"healthresponse")
        
	def receiveResponse108(self,task):
		
		while self.cReader.dataAvailable():
			datagram8 = NetDatagram()
			# Retrieve the contents of the datagram.
			if self.cReader.getData(datagram8):
				myIterator = PyDatagramIterator(datagram8)
                                print myIterator.getUint16()
                                msg = myIterator.getString()
                               
                                if msg is not None:
				    print "<-Server response:"
				    print msg
				    print myIterator.getUint32()
                                    self.received = 1
				    # CP State
				    raw_input("Press Enter to continue...") 
				    taskMgr.add(self.sendRequest107, 'attack')
		#Change Health Ends
	        return task.again
	
	# Attack Starts
        def sendRequest107(self,task):
		if(self.received):
			print "->Client request:"
			# Send a request to the server
		
		myPyDatagram107 = PyDatagram()
		prot = 107
		attackId = raw_input('Attack Id (0 or 1):')
		myPyDatagram107.addUint16(prot)
		myPyDatagram107.addUint32(attackId)
		self.cWriter.send(myPyDatagram107,self.connection)	
					
		#print " sent"
		self.received = 0
                taskMgr.add(self.receiveResponse108,"attackresponse")
        
	def receiveResponse107(self,task):
		
		
		while self.cReader.dataAvailable():
			datagram7 = NetDatagram()
			# Retrieve the contents of the datagram.
			if self.cReader.getData(datagram7):
				myIterator = PyDatagramIterator(datagram7)
                                print myIterator.getUint16()
                                msg = myIterator.getString()
                                
                                if msg is not None:
				    print "<-Server response:"	
                                    print msg
				    print myIterator.getUint32()
				    raw_input("Press Enter to continue...")
                                    self.received = 1
                                     # Change Health
				    taskMgr.add(self.sendRequest112, 'CP Capture')
		return task.again				    
		#Attack Ends
	
				
	
	
	
	#CP Capture Starts
        def sendRequest112(self,task):
		if(self.received):
			print "->Client request:"
			# Send a request to the server
		
		myPyDatagram112 = PyDatagram()
		prot = 112
		CP_id = raw_input('Control Point ID (1 to 5): ')
		faction_id = raw_input('press 0 for Red Or 1 for Blue ? :')
		myPyDatagram112.addUint16(prot)
		myPyDatagram112.addUint32(CP_id)
		myPyDatagram112.addUint32(faction_id)
		self.cWriter.send(myPyDatagram112,self.connection)	
					
		#print " sent"
		self.received = 0
                taskMgr.add(self.receiveResponse112,"CPCaptureRes")
        
	def receiveResponse112(self,task):
		
		while self.cReader.dataAvailable():
			datagram12 = NetDatagram()
			# Retrieve the contents of the datagram.
			if self.cReader.getData(datagram12):
				myIterator = PyDatagramIterator(datagram12)
                                print myIterator.getUint16()
                                msg = myIterator.getUint32()
                                
                                if msg is not None:
				    print "<-Server response:"
                                    print msg
				    print myIterator.getUint32()
				    raw_input("Press Enter to continue...")
                                    self.received = 1
                                     #HeartBeat
				    #raw_input("Press Enter to continue...") 
				    #taskMgr.add(self.communicate105, 'chat')
						    
		#CP Capture Ends
		
		
	# CHAT Starts
	def communicate105(self,task):
		#print "communicate"
		self.sendRequest105()
		self.receiveResponse105(task)		
                return task.again;
        		
        def sendRequest105(self):
		if(self.received):
			print "->Client request:"
			# Send a request to the server
		
		myPyDatagram105 = PyDatagram()
		prot = 105
		chat = raw_input('Insert Chat Message :')
		myPyDatagram105.addUint16(prot)
		myPyDatagram105.addString(chat)
		self.cWriter.send(myPyDatagram105,self.connection)	
					
		print " sent"
		self.received = 0
                
        
	def receiveResponse105(self,task):
		print "<-Server response:"
		while self.cReader.dataAvailable():
			datagram5 = NetDatagram()
			# Retrieve the contents of the datagram.
			if self.cReader.getData(datagram5):
				myIterator = PyDatagramIterator(datagram5)
                                print myIterator.getUint16()
                                msg = myIterator.getUint16()
                                print msg, " received"
                                if msg is not None:
                                    raw_input("Press Enter to continue...")
                                    self.received = 1
                                     # Move
				    raw_input("Press Enter to continue...") 
				    taskMgr.add(self.communicate111, 'CP state')
						    
		#CHAT Ends
	
	
	#CP State Starts
	def communicate111(self,task):
		#print "communicate"
		self.sendRequest111()
		self.receiveResponse111(task)		
                return task.again;
        		
	def sendRequest111(self):
		if(self.received):
			print "->Client request:"
			# Send a request to the server
		
		myPyDatagram111 = PyDatagram()
		prot = 111
		CP_id = raw_input('Control Point ID (1 to 5): ')
		CP_state = raw_input('Control Point state (1 red, 2 blue, 3 purple): ')
		myPyDatagram111.addUint16(prot)
		myPyDatagram111.addUint16(CP_id)
		myPyDatagram111.addUint16(CP_state)
		self.cWriter.send(myPyDatagram111,self.connection)	
					
		print " sent"
		self.received = 0
                
        
	def receiveResponse111(self,task):
		print "<-Server response:"
		while self.cReader.dataAvailable():
			datagram11 = NetDatagram()
			# Retrieve the contents of the datagram.
			if self.cReader.getData(datagram11):
				myIterator = PyDatagramIterator(datagram11)
                                print myIterator.getUint16()
                                msg = myIterator.getUint16()
                                print msg, " received"
                                if msg is not None:
                                    raw_input("Press Enter to continue...")
                                    self.received = 1
                                     # CP Capture
				    raw_input("Press Enter to continue...") 
				    taskMgr.add(self.communicate102, 'Logout')
		#CP State Ends
	
	
	# LOGOUT Starts
	def communicate102(self,task):
		#print "communicate"
		self.sendRequest102()
		self.receiveResponse102(task)		
                return task.again;
        		
        def sendRequest102(self):
		if(self.received):
			print "->Client request:"
			# Send a request to the server
		
		myPyDatagram102 = PyDatagram()
		prot = 102
		myPyDatagram102.addUint16(prot)
		self.cWriter.send(myPyDatagram102,self.connection)	
					
		print " sent"
		self.received = 0
          
	def receiveResponse102(self,task):
		print "<-Server response:"
		while self.cReader.dataAvailable():
			datagram2 = NetDatagram()
			# Retrieve the contents of the datagram.
			if self.cReader.getData(datagram2):
				myIterator = PyDatagramIterator(datagram2)
                                print myIterator.getUint16()
                                msg = myIterator.getUint16()
                                print msg, " received"
                                if msg is not None:
                                    raw_input("Press Enter to continue...")
                                    self.received = 1
                                     # Register
				    raw_input("Press Enter to continue...")
				    taskMgr.add(self.communicate301, 'Heartbeat')
						    
		#LOGOUT Ends
		
		
		#HeartBeat Starts
	def communicate301(self):
		#print "communicate"
		self.sendRequest301()
		self.receiveResponse301()		
                #return task.again;
        		
        def sendRequest301(self,task):
		if(self.received):
			print "->Client request:"
			# Send a request to the server
		
		myPyDatagram301 = PyDatagram()
		prot = 301
		myPyDatagram301.addUint16(prot)
		self.cWriter.send(myPyDatagram301,self.connection)	
		self.received = 0
                return task.again
        
	def receiveResponse301(self):
		
		while self.cReader.dataAvailable():
			datagram301 = NetDatagram()
			# Retrieve the contents of the datagram.
			if self.cReader.getData(datagram301):
				myIterator = PyDatagramIterator(datagram301)
                                p =  myIterator.getUint16()
                                if p == 213:
					un = myIterator.getString()
					cname = myIterator.getString()
					ctype = myIterator.getUint32()
					cteam = myIterator.getUint32()	
					if un ==  MyApp.uname:
						abc = 'abc'
					else:	
						print cname+' just joined a game......!! hurray'
				
					#print msg, " received"
					
					self.received = 1
                                		    
		#HeartBeat Ends
		
	#heartbeat
	def sendRequest113(self):
		if(self.received):
			print "->Client request:"
			# Send a request to the server
		
		myPyDatagram113 = PyDatagram()
		prot = 113
		myPyDatagram113.addUint16(prot)
		print MyApp.uname+'-------'
		if MyApp.uname == 'chintan':
			myPyDatagram113.addUint32(18)
		elif MyApp.uname == 'paras':
			myPyDatagram113.addUint32(35)
		else:
			myPyDatagram113.addUint32(3)
		self.cWriter.send(myPyDatagram113,self.connection)	
		self.received = 0
		#taskMgr.add(self.updateRoutine,'update113')
		#taskMgr.doMethodLater(1,self.sendRequest301,'HeatBeat')
		MyApp.retrieve113(self)
		
	def retrieve113(self):
		taskMgr.add(self.updateRoutine,'update113')
		taskMgr.doMethodLater(1,self.sendRequest301,'HeatBeat')
	
		
	def updateRoutine(self,task):
		self.receiveResponse301()
		return task.again;
예제 #49
0
class PlayerReg(
        DirectObject
):  #This class will hold anything that is related to regulating clients
    def __init__(self):
        self.PlayerList = []
        self.active = 0
        self.timeSinceLastUpdate = 0

    def updatePlayers(self, serverClass, data, type):
        if (type == "positions"):
            #keep players updated on their position
            self.elapsed = globalClock.getDt()
            self.timeSinceLastUpdate += self.elapsed
            if (self.timeSinceLastUpdate > 0.1):
                if (self.active):
                    self.datagram = PyDatagram()
                    self.datagram.addString("update")
                    #add the number of players
                    self.datagram.addFloat64(self.active)
                    #add every players current position
                    for k in range(self.active):
                        self.datagram.addFloat64(
                            self.PlayerList[k].currentPos['x'])
                        self.datagram.addFloat64(
                            self.PlayerList[k].currentPos['y'])
                        self.datagram.addFloat64(
                            self.PlayerList[k].currentPos['z'])
                        self.datagram.addFloat64(
                            self.PlayerList[k].currentPos['h'])
                        self.datagram.addFloat64(
                            self.PlayerList[k].currentPos['p'])
                        self.datagram.addFloat64(
                            self.PlayerList[k].currentPos['r'])
                    for k in self.PlayerList:
                        self.conn = k.connectionID
                        serverClass.cWriter.send(self.datagram, self.conn)
                self.timeSinceLastUpdate = 0
            return Task.cont

        if (type == "chat"):
            #Keep players up to date with all the chat thats goin on
            self.iterator = data
            self.datagram = PyDatagram()
            self.datagram.addString("chat")
            self.text = self.iterator.getString()
            self.datagram.addString(self.text)
            print self.text, ' ', str(serverClass)
            for k in self.PlayerList:
                serverClass.cWriter.send(self.datagram, k.connectionID)

    def updateData(self, connection, datagram, serverClass):
        self.iterator = PyDatagramIterator(datagram)
        self.type = self.iterator.getString()
        if (self.type == "positions"):
            for k in self.PlayerList:
                if (k.connectionID == connection):
                    k.currentPos['x'] = self.iterator.getFloat64()
                    k.currentPos['y'] = self.iterator.getFloat64()
                    k.currentPos['z'] = self.iterator.getFloat64()
                    k.currentPos['h'] = self.iterator.getFloat64()
                    k.currentPos['p'] = self.iterator.getFloat64()
                    k.currentPos['r'] = self.iterator.getFloat64()
        if (self.type == "chat"):
            self.updatePlayers(serverClass, self.iterator, "chat")

    def sendInitialInfo(self, i, server):  #Initialize the new Player
        self.con = self.PlayerList[
            i].connectionID  #set the connection to the player's connection
        self.datagram = PyDatagram()  #create a datagram instance
        self.datagram.addString(
            "init")  #specify to the client that this is an init type packet
        self.datagram.addUint8(
            self.active
        )  #specify the player's number (not sure why this is here)
        self.datagram.addFloat64(
            i)  #specify number of players (same as player's number)
        for k in self.PlayerList:  #Add the current position of everyone in the game world and send it
            self.datagram.addString(k.username)
            self.datagram.addFloat64(k.currentPos['x'])
            self.datagram.addFloat64(k.currentPos['y'])
            self.datagram.addFloat64(k.currentPos['z'])
        server.cWriter.send(self.datagram, self.con)
예제 #50
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()