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)
Пример #2
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)
    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)
Пример #4
0
    def makeNetString(self):
        dataList = self.experience
        datagram = PyDatagram()
        for track in xrange(0, len(Tracks)):
            datagram.addUint16(dataList[track])

        dgi = PyDatagramIterator(datagram)
        return dgi.getRemainingBytes()
Пример #5
0
    def makeNetString(self):
        dataList = self.experience
        datagram = PyDatagram()
        for track in range(0, len(Tracks)):
            datagram.addUint16(dataList[track])

        dgi = PyDatagramIterator(datagram)
        return dgi.getRemainingBytes()
def trackExperienceToNetString(tracks):
    dg = PyDatagram()

    for track, exp in tracks.iteritems():
        dg.addUint8(TrackNameById.values().index(track))
        dg.addInt16(exp)
    dgi = PyDatagramIterator(dg)
    return dgi.getRemainingBytes()
Пример #7
0
    def makeNetString(self):
        dataList = self.inventory
        datagram = PyDatagram()
        for track in xrange(0, len(Tracks)):
            for level in xrange(0, len(Levels[track])):
                datagram.addUint8(dataList[track][level])

        dgi = PyDatagramIterator(datagram)
        return dgi.getRemainingBytes()
Пример #8
0
    def makeNetString(self):
        dataList = self.inventory
        datagram = PyDatagram()
        for track in range(0, len(Tracks)):
            for level in range(0, len(Levels[track])):
                datagram.addUint8(dataList[track][level])

        dgi = PyDatagramIterator(datagram)
        return dgi.getRemainingBytes()
def getDefaultBackpackNetString(isAI=False):
    bp = getDefaultBackpack(isAI)

    dg = PyDatagram()
    for gagId, supply in bp.items():
        dg.addUint8(gagId)
        dg.addUint8(supply)
    dgi = PyDatagramIterator(dg)
    return dgi.getRemainingBytes()
Пример #10
0
 def makeNetString(self):
     """makeNetString(self)
     Make a network packet out of the experience
     """
     dataList = self.experience
     datagram = PyDatagram()
     for track in range(0, len(Tracks)):
         datagram.addUint16(dataList[track])
     dgi = PyDatagramIterator(datagram)
     return dgi.getRemainingBytes()
    def toNetString(self, avDoId):
        dg = PyDatagram()
        dg.addUint32(avDoId)
        dg.addUint8(base.air.attackMgr.getAttackIDByName(self.favoriteGag))

        for trackName in self.tracks.keys():
            track = self.getTrackByName(trackName)
            dg.addUint8(GagGlobals.TrackNameById.keys()[
                GagGlobals.TrackNameById.values().index(trackName)])
            dg.addInt16(track.exp)
            dg.addInt16(track.maxExp)
            dg.addUint16(track.increment)
        dgi = PyDatagramIterator(dg)
        return dgi.getRemainingBytes()
    def makeNetString(self):
        dataList = self.inventory
        datagram = PyDatagram()
        for track in xrange(0, len(Tracks)):
            for level in xrange(0, len(Levels[track])):
                if track < 0:
                    self.notify.warning("Invalid Track Specfied!")
                    return
                if level < 0:
                    self.notify.warning("Invalid Level Specfied!")
                    return
                datagram.addUint8(dataList[track][level])

        dgi = PyDatagramIterator(datagram)
        return dgi.getRemainingBytes()
Пример #13
0
	def routeMessage(self, channel, datagram):
		if not datagram:
			return

		di = PyDatagramIterator(datagram)
		# The message director used this value for determining which process the connection requested, but
		# we don't want to send this value over the network because its unnecessary.
		di.skipBytes(16)
		# This is the channel the data is being routed to. We need this but, does the client really need
		# to be informed of its own channel?
		di.skipBytes(64)

		datagram = PyDatagram()
		# Pack the remaining bytes and ship the message out.
		datagram.appendData(di.getRemainingBytes())
		self.routeMessageToChannel(channel, datagram)
Пример #14
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)
Пример #15
0
    def sendUpdateToChannel(self, distObj, channelId, fieldName, args):
        """ Sends a targeted update of a single field to a particular
        client.  The top 32 bits of channelId is ignored; the lower 32
        bits should be the client Id of the recipient (i.e. the
        client's doIdbase).  The field update will be sent to the
        indicated client only.  The field must be marked clsend or
        p2p, and may not be marked broadcast. """

        datagram = distObj.dclass.clientFormatUpdate(fieldName, distObj.doId,
                                                     args)
        dgi = PyDatagramIterator(datagram)

        # Reformat the packed datagram to change the message type and
        # add the target id.
        dgi.getUint16()

        dg = PyDatagram()
        dg.addUint16(CLIENT_OBJECT_UPDATE_FIELD_TARGETED_CMU)
        dg.addUint32(channelId & 0xffffffff)
        dg.appendData(dgi.getRemainingBytes())

        self.send(dg)