예제 #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()))
 def setDNAString(self, dnaStr):
     data = PyDatagram(dnaStr)
     iter = PyDatagramIterator(data)
     self.setShapeStyle(int(iter.getUint8()))
     bgData = [
         0] * len(self.bgData)
     layoutData = [
         0] * len(self.layoutData)
     for x in range(len(bgData)):
         bgData[x] = int(iter.getUint8())
     
     self.setBackground(*bgData)
     for x in range(len(layoutData)):
         layoutData[x] = int(iter.getUint8())
     
     self.setLayout(*layoutData)
     self.emblems = { }
     eCount = 0
     while iter.getRemainingSize() >= len(self.DefaultEmblemData):
         edata = self.DefaultEmblemData[:]
         for x in range(0, len(edata)):
             edata[x] = int(iter.getUint8())
         
         self.setEmblem(eCount, *edata)
         eCount += 1
예제 #3
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")
예제 #4
0
 def handle_datagram(self, datagram):
     connection = datagram.getConnection()
     if not connection:
         self.dump_invalid_connection(connection)
     
     di = PyDatagramIterator(datagram)
     if di.getUint8() == 1:
         self.handle_incoming(di, connection, datagram)
     elif di.getUint8() == BAD_CHANNEL_ID:
         self.handle_bad_channel(di)
예제 #5
0
    def createGardenFromData(self, gardenData):
        dg = PyDatagram(gardenData)
        gardenData = PyDatagramIterator(dg)
        plotCount = gardenData.getUint8()
        for _ in xrange(plotCount):
            occupier = gardenData.getUint8()
            if occupier not in occupier2Class:
                continue
            plot = occupier2Class[occupier](self.air, self, self.house.housePos)
            plot.construct(gardenData)
            plot.generateWithRequired(self.house.zoneId)

            self.plots.append(plot)
예제 #6
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.")
예제 #7
0
    def process(self, data):
        it = PyDatagramIterator(data)
        mssgID = it.getUint8()
        if mssgID == 42:
            return None
        vel = it.getFloat32()
        z = it.getFloat32()
        x = it.getFloat32()
        y = it.getFloat32()
        checksum = it.getFloat32()
        
        #print "velocity:" , vel ,
        #" Z position:" , z , " Checksum " , checksum
        
        newx = x
        zdiff = z - self.smiley.getZ()
        self.smiley.setPythonTag("velocity", vel + zdiff * 0.03)
        
        #self.smiley.setX(x)
        #self.smiley.setZ(z)
        #self.smiley.setY(y)
        

        data = PyDatagram()
        data.addUint8(0)
        data.addString("w") #change this to key being pressed forward
        
        
        data.addString("OH HI MARTK!!")
        
        
        return data

        
        
예제 #8
0
    def process(self, data):
        it = PyDatagramIterator(data)
        msgid = it.getUint8()
        conn = data.getConnection()

        sendingPlayer = None
        for p in self.server.players:
            if p.connection == conn:
                sendingPlayer = p
                break

        else:
            logging.error("No sendingPlayer found")

        if msgid == ServerMsgId.keepAlive:
            return None
        elif msgid == ServerMsgId.registration:
            return self.handleRegistration(it, sendingPlayer)

        elif msgid == ServerMsgId.chatMsg:
            return self.handleChatMsg(it, sendingPlayer)

        elif msgid == ServerMsgId.tryPlayCard:
            return self.handleTryPlayCard(it, sendingPlayer)

        elif msgid == ServerMsgId.tryPutInBattleground:
            return self.handleTryPutInBattleground(it, sendingPlayer)
 def process(self, data):
     it = PyDatagramIterator(data)
     msgid = it.getUint8()
     if msgid == 0:
         return self.handleHello(it)
     elif msgid == 1:
         return self.handleQuestion(it)
     elif msgid == 2:
         return self.handleBye(it)
예제 #10
0
	def receiveData(self, dg):
		dg = PyDatagramIterator(dg)
		fr = (dg.getUint8(), dg.getUint8())
		to = (dg.getUint8(), dg.getUint8())
		print "Received move %s -> %s" % (fr, to)

		def indicate():
			self.turnIndicator['text'] = 'Your turn!'
			self.sfx = loader.loadSfx('audio/ding.wav')
			self.sfx.play()

		seq = Sequence()
		seq.append(self.showPathIfVisible(fr, to))
		seq.append(self.makeMove(fr, to))
		seq.append(Func(indicate))
		seq.append(Func(self.showVisibleSquares))

		seq.start()
예제 #11
0
 def process(self, data):
     print "Got some data"
     it = PyDatagramIterator(data)
     msgid = it.getUint8()
     if msgid == 0:
         print "Got 0 key mssg"
         return self.handleHello(it)
     elif msgid == 1:
         return self.handleQuestion(it)
     elif msgid == 2:
         return self.handleBye(it)
예제 #12
0
    def __makeList(self, store):
        list = []
        if self.__blob:
            dg = PyDatagram(self.__blob)
            di = PyDatagramIterator(dg)
            versionNumber = di.getUint8()
            while di.getRemainingSize() > 0:
                item = CatalogItem.decodeCatalogItem(di, versionNumber, store)
                list.append(item)

        return list
예제 #13
0
def getItem(blob, store = 0):
    dg = PyDatagram(blob)
    di = PyDatagramIterator(dg)
    try:
        versionNumber = di.getUint8()
        return decodeCatalogItem(di, versionNumber, store)
    except Exception, e:
        CatalogItem.notify.warning('Invalid catalog item: %s, %s' % (sys.exc_info()[0], e))
        dg.dumpHex(Notify.out())
        import CatalogInvalidItem
        return CatalogInvalidItem.CatalogInvalidItem()
예제 #14
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())
예제 #15
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
예제 #16
0
파일: Client.py 프로젝트: czorn/Modifire
 def TCPPacketListenTask(self, task):
     if self.tcpReader.dataAvailable():
         datagram = NetDatagram()
         if self.tcpReader.getData(datagram):
             data = PyDatagramIterator(datagram)
             ip = datagram.getAddress().getIpString()
             port = datagram.getAddress().getPort()
             peerAddr = NetAddress()
             peerAddr.setHost(ip, port)
             
             packetType = data.getUint8()
             if(packetType == Packet.PC_TCP_PACKET):
                 self.tcpPacketController.OnPacketReceived(data, peerAddr)
     
     return task.cont
예제 #17
0
    def makeFromNetString(self, netString):
        dataList = []
        dg = PyDatagram(netString)
        dgi = PyDatagramIterator(dg)
        for track in xrange(0, len(Tracks)):
            subList = []
            for level in xrange(0, len(Levels[track])):
                if dgi.getRemainingSize() > 0:
                    value = dgi.getUint8()
                else:
                    value = 0
                subList.append(value)

            dataList.append(subList)

        return dataList
예제 #18
0
    def makeFromNetStringForceSize(self, netString, numTracks, numLevels):
        dataList = []
        dg = PyDatagram(netString)
        dgi = PyDatagramIterator(dg)
        for track in range(0, numTracks):
            subList = []
            for level in range(0, numLevels):
                if dgi.getRemainingSize() > 0:
                    value = dgi.getUint8()
                else:
                    value = 0
                subList.append(value)

            dataList.append(subList)

        return dataList
예제 #19
0
    def makeFromNetString(self, netString):
        dataList = []
        dg = PyDatagram(netString)
        dgi = PyDatagramIterator(dg)
        for track in xrange(0, len(Tracks)):
            subList = []
            for level in xrange(0, len(Levels[track])):
                if dgi.getRemainingSize() > 0:
                    value = dgi.getUint8()
                else:
                    value = 0
                subList.append(value)

            dataList.append(subList)

        return dataList
예제 #20
0
 def makeFromNetStringForceSize(self, netString, numTracks, numLevels):
     """makeFromNetString(self)
     Make an inventory from a network packet
     """
     dataList = []
     dg = PyDatagram(netString)
     dgi = PyDatagramIterator(dg)
     for track in range(0, numTracks):
         subList = []
         for level in range(0, numLevels):
             if dgi.getRemainingSize() > 0:
                 value = dgi.getUint8()
             else:
                 value = 0
             subList.append(value)
         dataList.append(subList)
     return dataList
예제 #21
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)
예제 #22
0
파일: Client.py 프로젝트: czorn/Modifire
    def UDPPacketListenTask(self, task):
        while self.cReader.dataAvailable():
            datagram = NetDatagram()
            if self.cReader.getData(datagram):
                #print 'PACKET', datagram
                data = PyDatagramIterator(datagram)
                ip = datagram.getAddress().getIpString()
                port = datagram.getAddress().getPort()
                peerAddr = NetAddress()
                peerAddr.setHost(ip, port)
                
                packetType = data.getUint8()
                if(packetType == Packet.PC_RELIABLE_PACKET):
                    self.reliablePacketController.OnPacketReceived(data, peerAddr)
                elif(packetType == Packet.PC_UNRELIABLE_PACKET):
                    self.unreliablePacketController.OnPacketReceived(data, peerAddr)
                elif(packetType == Packet.PC_ENVIRONMENT_PACKET):
                    self.dataHandler.OnDataReceived(data, peerAddr, Packet.PC_ENVIRONMENT_PACKET)

        return Task.cont
예제 #23
0
파일: Server.py 프로젝트: czorn/Modifire
 def UDPPacketListenTask(self, task = None):        
     while self.cReader.dataAvailable():
         datagram = NetDatagram()
         if self.cReader.getData(datagram):
             data = PyDatagramIterator(datagram)
             ip = datagram.getAddress().getIpString()
             port = datagram.getAddress().getPort()
             peerAddr = NetAddress()
             peerAddr.setHost(ip, port)
             #print 'GOT UDP PACKET FROM', peerAddr.getIpString(), peerAddr.getPort()
             
             isReliable = data.getUint8()
             if(isReliable == Packet.PC_RELIABLE_PACKET):
                 self.reliablePacketController.OnPacketReceived(data, peerAddr)
             elif(isReliable == Packet.PC_UNRELIABLE_PACKET):
                 self.unreliablePacketController.OnPacketReceived(data, peerAddr)
                 
             if(self.ClientIsConnected(peerAddr)):
                 self.GetActiveClient(peerAddr).timestamp = GameTime.time
                 
     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 check_for_message(self, taskdata):
        """
        Called repeatedly to check if any new messages from server
        This gets the information from said datagram and calls whatever function necessary
        @param self
        @param taskdata
        """
        if self.cReader.dataAvailable():
            dg = NetDatagram()
            if self.cReader.getData(dg):
                iterator = PyDatagramIterator(dg)

                try:
                    msg_id = iterator.getUint8()
                except AssertionError:
                    self.notify.warning("[check_for_message] Invalid msg_id!")
                    return Task.cont

                if msg_id in self.mapping:
                    self.mapping[msg_id](self, iterator)
                else:
                    self.notify.warning(
                        f"[check_for_message] Unknown msg_id: {msg_id}")
        return Task.cont
예제 #26
0
    def process(self, data):
        it = PyDatagramIterator(data)
        msgid = it.getUint8()

        if msgid == ClientMsgId.keepAlive:
            return None

        elif msgid == ClientMsgId.joinAccepted:
            return self.handleJoinAccepted(it)

        elif msgid == ClientMsgId.playerConnected:
            return self.handleConnect(it)

        elif msgid == ClientMsgId.playerDisconnected:
            return self.handleDisconnect(it)

        elif msgid == ClientMsgId.chatMsg:
            return self.handleChatMsg(it)

        elif msgid == ClientMsgId.gameStarted:
            return self.handleGameStarted(it)

        elif msgid == ClientMsgId.nextTurn:
            return self.handleNextTurn(it)

        elif msgid == ClientMsgId.playCard:
            return self.handlePlayCard(it)

        elif msgid == ClientMsgId.sendHand:
            return self.handleSendHand(it)

        elif msgid == ClientMsgId.sendTurnTime:
            return self.handleSendTurnTime(it)

        elif msgid == ClientMsgId.sendUpdateBattleground:
            return self.handleUpdateBattleground(it)
예제 #27
0
    def check_for_message(self, taskdata):
        """
        Called repeatedly to check if there's any new messages
        """
        if self.cReader.dataAvailable():
            dg = NetDatagram()
            if self.cReader.getData(dg):
                iterator = PyDatagramIterator(dg)
                connection = dg.getConnection()

                try:
                    msg_id = iterator.getUint8()
                except AssertionError:
                    self.notify.warning("[check_for_message] No message ID")
                    return Task.cont

                # check if real msg_id
                if msg_id in self.mapping:
                    self.mapping[msg_id](self, iterator)
                else:
                    self.notify.warning(
                        "[check_for_message] Invalid msg_id: {}".format(
                            msg_id))
        return Task.cont
예제 #28
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)
예제 #29
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
예제 #30
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
예제 #31
0
 def readHeader(self, datagram):
     dgi = PyDatagramIterator(datagram)
     number = dgi.getUint32()
     dtype = dgi.getUint8()
     self.notify.debug("Packet %d type %d received" % (number, dtype))
     return (dgi, dtype)
 def makeFromNetString(self, string):
     dg = PyDatagram(string)
     dgi = PyDatagramIterator(dg)
     self.type = dgi.getFixedString(1)
     if self.type == "t":
         headIndex = dgi.getUint8()
         torsoIndex = dgi.getUint8()
         legsIndex = dgi.getUint8()
         self.head = toonHeadTypes[headIndex]
         self.torso = toonTorsoTypes[torsoIndex]
         self.legs = toonLegTypes[legsIndex]
         gender = dgi.getUint8()
         if gender == 1:
             self.gender = "m"
         else:
             self.gender = "f"
         self.topTex = dgi.getUint8()
         self.topTexColor = dgi.getUint8()
         self.sleeveTex = dgi.getUint8()
         self.sleeveTexColor = dgi.getUint8()
         self.botTex = dgi.getUint8()
         self.botTexColor = dgi.getUint8()
         self.armColor = dgi.getUint8()
         self.gloveColor = dgi.getUint8()
         self.legColor = dgi.getUint8()
         self.headColor = dgi.getUint8()
     else:
         notify.error("unknown avatar type: ", self.type)
 def makeFromNetString(self, string):
     dg = PyDatagram(string)
     dgi = PyDatagramIterator(dg)
     self.type = dgi.getFixedString(1)
     if self.type == 't':
         headIndex = dgi.getUint8()
         torsoIndex = dgi.getUint8()
         legsIndex = dgi.getUint8()
         self.head = toonHeadTypes[headIndex]
         self.torso = toonTorsoTypes[torsoIndex]
         self.legs = toonLegTypes[legsIndex]
         gender = dgi.getUint8()
         if gender == 1:
             self.gender = 'm'
         else:
             self.gender = 'f'
         self.topTex = dgi.getUint8()
         self.topTexColor = dgi.getUint8()
         self.sleeveTex = dgi.getUint8()
         self.sleeveTexColor = dgi.getUint8()
         self.botTex = dgi.getUint8()
         self.botTexColor = dgi.getUint8()
         self.armColor = dgi.getUint8()
         self.gloveColor = dgi.getUint8()
         self.legColor = dgi.getUint8()
         self.headColor = dgi.getUint8()
     else:
         notify.error('unknown avatar type: ', self.type)
예제 #34
0
 def readHeader(self, datagram):
     dgi = PyDatagramIterator(datagram)
     number = dgi.getUint32()
     type = dgi.getUint8()
     self.notify.debug("Packet %d type %d received" % (number, type))
     return (dgi, type)
예제 #35
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)
예제 #36
0
 def processMsgData(self, dataGram):
     iterator = PyDatagramIterator(dataGram)
     msgID = iterator.getUint8()
     if msgID == PRINT_MESSAGE:
         msg = iterator.getString()
         print msg