예제 #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 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
    def __loadDNAFileBase(self, store, file):
        f = open(file, 'rb')
       
        self.curStore = store
        self.curProp = None
        self.hadError = False
        
        data = f.read()
        dg = PyDatagram(data)
        dgi = PyDatagramIterator(dg)
        
        f.close()
        
        header = dgi.extractBytes(5)
        if header != "PDNA\n":
            raise DNAError.DNAError("Invalid header")
            
        compressed = dgi.getBool()
        dgi.skipBytes(1)
        
        if compressed:
            # Decompress the dgi
            # Sadly we have to extract everything
            # And make another dgi
            import zlib
            
            data = dgi.getRemainingBytes()
            data = zlib.decompress(data)
            
            dg = PyDatagram(data)
            dgi = PyDatagramIterator(dg)

        self.handleStorageData(dgi)
        self.handleCompData(dgi)
    def loadDNAFileBase(self, store, _file):
        if type(_file) == str and _file.endswith(".dna"):
            _file = _file.replace(".dna", ".pdna")
            #_file = _file.replace("../resources/", "")
        if __debug__:
            _file = Filename("../resources/" + _file)
        else:
            _file = Filename("/" + _file)

        vfs = VirtualFileSystem.getGlobalPtr()
        vfs.resolveFilename(_file, "")
        if not vfs.exists(_file):
            raise DNAError.DNAError("Unable to open DNA file '%s'" %
                                    (str(_file)))
        dnaData = vfs.readFile(_file, True)

        self.curStore = store
        dg = PyDatagram(dnaData)
        dgi = PyDatagramIterator(dg)
        header = dgi.extractBytes(5)
        if header != 'PDNA\n':
            raise DNAError.DNAError('Invalid header: %s' % (header))

        compressed = dgi.getBool()
        dgi.skipBytes(1)

        if compressed:
            data = dgi.getRemainingBytes()
            data = zlib.decompress(data)
            dg = PyDatagram(data)
            dgi = PyDatagramIterator(dg)

        self.curComp = None
        self.handleStorageData(dgi)
        self.handleCompData(dgi)
예제 #5
0
    def __loadDNAFileBase(self, store, file):
        f = open(file, 'rb')
       
        self.curStore = store
        self.curProp = None
        self.hadError = False
        
        data = f.read()
        dg = PyDatagram(data)
        dgi = PyDatagramIterator(dg)
        
        f.close()
        
        header = dgi.extractBytes(5)
        if header != "PDNA\n":
            raise DNAError.DNAError("Invalid header")
            
        compressed = dgi.getBool()
        dgi.skipBytes(1)
        
        if compressed:
            # Decompress the dgi
            # Sadly we have to extract everything
            # And make another dgi
            import zlib
            
            data = dgi.getRemainingBytes()
            data = zlib.decompress(data)
            
            dg = PyDatagram(data)
            dgi = PyDatagramIterator(dg)

        self.handleStorageData(dgi)
        self.handleCompData(dgi)
예제 #6
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
예제 #7
0
 def loadDNAFileBase(self, dnaStorage, file):
     self.dnaStorage = dnaStorage
     dnaFile = open(file, 'rb')
     dnaData = dnaFile.read()
     dg = PyDatagram(dnaData)
     dgi = PyDatagramIterator(dg)
     dnaFile.close()
     header = dgi.extractBytes(5)
     if header != 'PDNA\n':
         raise DNAError.DNAError('Invalid header: %s' % (header))
     compressed = dgi.getBool()
     dgi.skipBytes(1)
     if compressed:
         data = dgi.getRemainingBytes()
         data = zlib.decompress(data)
         dg = PyDatagram(data)
         dgi = PyDatagramIterator(dg)
     self.handleStorageData(dgi)
     self.handleCompData(dgi)
예제 #8
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
예제 #9
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())
예제 #10
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
예제 #11
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)