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): 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)
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()
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()
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()
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()
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()
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)
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)
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)