コード例 #1
0
 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
コード例 #2
0
ファイル: CatalogItemList.py プロジェクト: nate97/src
    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
コード例 #3
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
コード例 #4
0
 def __makeList(self, store):
     # Construct a new list and populate it with the items decoded
     # from the blob.
     list = []
     if self.__blob:  # empty string or None means nothing on the list.
         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
コード例 #5
0
    def fromNetString(self, netString):
        self.netString = netString

        dg = PyDatagram(netString)
        dgi = PyDatagramIterator(dg)
        dictionary = {}

        while dgi.getRemainingSize() > 0:
            gagId = dgi.getUint8()
            supply = dgi.getUint8()
            dictionary[gagId] = supply
        return dictionary
コード例 #6
0
def getTrackExperienceFromNetString(netString):
    dg = PyDatagram(netString)
    dgi = PyDatagramIterator(dg)

    tracks = {}

    for track in TrackNameById.values():
        tracks[track] = 0

    while dgi.getRemainingSize() > 0:
        trackId = dgi.getUint8()
        exp = dgi.getInt16()

        tracks[TrackNameById.get(trackId)] = exp
    return tracks
コード例 #7
0
ファイル: InventoryBase.py プロジェクト: mting314/Toontown
    def makeFromNetStringForceSize(self, netString, numTracks, numLevels):
        dataList = []
        dg = PyDatagram(netString)
        dgi = PyDatagramIterator(dg)
        for track in xrange(0, numTracks):
            subList = []
            for level in xrange(0, numLevels):
                if dgi.getRemainingSize() > 0:
                    value = dgi.getUint8()
                else:
                    value = 0
                subList.append(value)

            dataList.append(subList)

        return dataList
コード例 #8
0
    def makeFromNetString(self, netString):
        dataList = []
        dg = PyDatagram(netString)
        dgi = PyDatagramIterator(dg)
        for track in range(0, len(Tracks)):
            subList = []
            for level in range(0, len(Levels[track])):
                if dgi.getRemainingSize() > 0:
                    value = dgi.getUint8()
                else:
                    value = 0
                subList.append(value)

            dataList.append(subList)

        return dataList
コード例 #9
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
コード例 #10
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
コード例 #11
0
    def fromNetString(self, netString):
        self.tracks.clear()
        dg = PyDatagram(netString)
        dgi = PyDatagramIterator(dg)

        avDoId = dgi.getUint32()
        favGagId = dgi.getUint8()

        self.avatar = base.cr.doId2do.get(avDoId, None)
        self.avatarName = None if not self.avatar else self.avatar.getName()

        self.favoriteGag = base.cr.attackMgr.getAttackName(favGagId)

        while dgi.getRemainingSize() > 0:
            track = GagGlobals.TrackNameById.get(dgi.getUint8())
            exp = dgi.getInt16()
            maxExp = dgi.getInt16()
            increment = dgi.getInt16()
            self.tracks[track] = Track(track, exp, maxExp, increment)
        return avDoId
コード例 #12
0
ファイル: Backpack.py プロジェクト: xMakerx/cio-src
    def updateSuppliesFromNetString(self, netString):
        self.netString = netString
        
        dg = PyDatagram(netString)
        dgi = PyDatagramIterator(dg)

        addedGag = False
        
        while dgi.getRemainingSize() > 0:
            gagId = dgi.getUint8()
            supply = dgi.getUint8()
            
            if self.hasGag(gagId):
                self.setSupply(gagId, supply)
            else:
                addedGag = True
                self.addGag(gagId, supply)

        if addedGag and self.avatar == base.localAvatar:
            if base.localAvatar.invGui:
                base.localAvatar.reloadInvGui()
コード例 #13
0
    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
コード例 #14
0
ファイル: net2.py プロジェクト: Sporadica-IS/a3p-1
 def processPacket(self, packet, backend, sender=None):
     iterator = PyDatagramIterator(packet)
     lastId = "None"
     lastController = "None"
     try:
         rebroadcast = True
         while iterator.getRemainingSize() > 0:
             type = net.Uint8.getFrom(iterator)
             if type == constants.PACKET_CONTROLLER:
                 rebroadcast = True
                 id = net.Uint8.getFrom(iterator)
                 entity = backend.entityGroup.getEntity(id)
                 if entity is not None:
                     lastId = str(id)
                     lastController = entity.controller
                     entity.controller.clientUpdate(backend.aiWorld,
                                                    backend.entityGroup,
                                                    iterator)
                 else:
                     engine.log.warning(
                         "Received controller packet with no matching entity. ID: "
                         + str(id) + " Last entity updated: " + lastId +
                         " - controller: " + str(lastController))
                     # Only send a request once every two seconds
                     if sender is not None and (
                         (id not in list(self.requestedEntitySpawns.keys()))
                             or (engine.clock.time -
                                 self.requestedEntitySpawns[id] > 2.0)):
                         p = net.Packet()
                         p.add(
                             net.Uint8(constants.PACKET_REQUESTSPAWNPACKET))
                         p.add(net.Uint8(id))
                         net.context.send(p, sender)
                         self.requestedEntitySpawns[id] = engine.clock.time
                         engine.log.info(
                             "Sending request for missing entity spawn packet. Entity ID: "
                             + str(id))
                     return rebroadcast
             elif type == constants.PACKET_SPAWN:
                 controllerType = net.Uint8.getFrom(iterator)
                 entity = controllers.types[controllerType].readSpawnPacket(
                     backend.aiWorld, backend.entityGroup, iterator)
                 if entity.getId() in list(
                         self.requestedEntitySpawns.keys()):
                     del self.requestedEntitySpawns[entity.getId()]
                 if entity is not None and backend.entityGroup.getEntity(
                         entity.getId()) is None:
                     backend.entityGroup.addEntity(entity)
                 elif entity is not None:
                     engine.log.warning(
                         "Spawned entity " + str(entity.getId()) +
                         " already exists. Cancelling spawn.")
                     entity.delete(backend.entityGroup,
                                   killed=False,
                                   localDelete=False)
                 rebroadcast = True
             elif type == constants.PACKET_DELETE:
                 id = net.Uint8.getFrom(iterator)
                 entity = backend.entityGroup.getEntity(id)
                 killed = net.Boolean.getFrom(iterator)
                 if entity is not None:
                     if killed:  # The boolean indicates that the entity was not only deleted, it was killed. Also, let the entity know this was a remote delete packet.
                         entity.kill(backend.aiWorld, backend.entityGroup,
                                     False)
                     else:
                         entity.delete(backend.entityGroup, False, False)
                 rebroadcast = True
             elif type == constants.PACKET_REQUESTSPAWNPACKET:
                 self.clientSpawnPacketRequests.append(
                     (net.Uint8.getFrom(iterator), sender))
                 rebroadcast = False
             elif type == constants.PACKET_SETUP:
                 if net.netMode == net.MODE_CLIENT:
                     messenger.send("client-setup", [iterator])
                 else:
                     return False
                 rebroadcast = False
             elif type == constants.PACKET_CHAT:
                 # Username and message
                 messenger.send("chat-incoming", [
                     net.String.getFrom(iterator),
                     net.String.getFrom(iterator)
                 ])
                 rebroadcast = True
             elif type == constants.PACKET_ENDMATCH:
                 engine.log.info("Received match end packet.")
                 messenger.send("end-match", [iterator])
                 rebroadcast = True
             elif type == constants.PACKET_NEWCLIENT:
                 # Sender address and username
                 messenger.send(
                     "server-new-connection",
                     [sender, net.String.getFrom(iterator)])
                 rebroadcast = False
             elif type == constants.PACKET_DISCONNECT:
                 engine.log.info(
                     net.addressToString(sender) + " disconnected.")
                 messenger.send("disconnect", [sender])
                 rebroadcast = False
             elif type == constants.PACKET_SERVERFULL:
                 messenger.send("server-full")
             elif type == constants.PACKET_CONFIRMREGISTER:
                 messenger.send("lobby-confirm-register")
                 rebroadcast = False
             elif type == constants.PACKET_EMPTY:
                 rebroadcast = False
             elif type == constants.PACKET_CLIENTREADY:
                 rebroadcast = False
                 messenger.send("client-ready", [sender])
             elif type == constants.PACKET_NEWCLIENTNOTIFICATION:
                 address = net.String.getFrom(iterator)
                 port = net.Uint16.getFrom(iterator)
                 # Make sure we get all the data out of the packet to ensure proper processing.
                 # This packet has already been handled by the NetContext.
                 rebroadcast = False
             elif type == constants.PACKET_ENTITYCHECKSUM:
                 # Number of active entities we're supposed to have
                 checksum = net.Uint8.getFrom(iterator)
                 if net.netMode == net.MODE_CLIENT and checksum != len([
                         x
                         for x in list(backend.entityGroup.entities.values(
                         )) if x.active and x.getId() < 256
                 ]):
                     # We don't have the right number of entities
                     p = net.Packet()
                     p.add(net.Uint8(constants.PACKET_REQUESTENTITYLIST))
                     net.context.send(p, sender)
                     engine.log.info(
                         "Entity checksum failed. Requesting full entity list."
                     )
                 rebroadcast = False
             elif type == constants.PACKET_REQUESTENTITYLIST:
                 p = net.Packet()
                 p.add(net.Uint8(constants.PACKET_ENTITYLIST))
                 entityList = [
                     x for x in list(backend.entityGroup.entities.values())
                     if x.active and x.getId() < 256
                 ]
                 p.add(net.Uint8(len(entityList)))
                 for entity in entityList:
                     p.add(net.Uint8(entity.getId()))
                 net.context.send(p, sender)
                 engine.log.info("Sending entity list to " +
                                 net.addressToString(sender))
                 rebroadcast = False
             elif type == constants.PACKET_ENTITYLIST:
                 total = net.Uint8.getFrom(iterator)
                 entities = []
                 missingEntities = []
                 for _ in range(total):
                     id = net.Uint8.getFrom(iterator)
                     if id not in list(backend.entityGroup.entities.keys()):
                         missingEntities.append(id)
                     entities.append(id)
                 # Delete any extra entities, assuming they aren't ones that
                 # we just spawned on our end.
                 for entity in (x for x in list(
                         backend.entityGroup.entities.values())
                                if x.active and x.getId() < 256):
                     if entity.getId(
                     ) not in entities and engine.clock.time - entity.spawnTime > 5.0:
                         entity.delete(backend.entityGroup, False, False)
                 if len(missingEntities) > 0:
                     # Request spawn packets for any missing entities
                     p = net.Packet()
                     for id in missingEntities:
                         p.add(
                             net.Uint8(constants.PACKET_REQUESTSPAWNPACKET))
                         p.add(net.Uint8(id))
                         self.requestedEntitySpawns[id] = engine.clock.time
                         engine.log.info(
                             "Sending request for missing entity spawn packet. Entity ID: "
                             + str(id))
                     net.context.send(p, sender)
                 rebroadcast = False
             else:
                 rebroadcast = False
     except AssertionError:
         engine.log.warning("Packet iteration failed. Discarding packet.")
         rebroadcast = False
     return rebroadcast
コード例 #15
0
ファイル: net2.py プロジェクト: wezu/a3p-koparka
 def processPacket(self, packet, backend, sender = None):
     iterator = PyDatagramIterator(packet)
     lastId = "None"
     lastController = "None"
     try:
         rebroadcast = True
         while iterator.getRemainingSize() > 0:
             type = net.Uint8.getFrom(iterator)
             if type == net.PACKET_CONTROLLER:
                 rebroadcast = True
                 id = net.Uint8.getFrom(iterator)
                 entity = backend.entityGroup.getEntity(id)
                 if entity != None:
                     lastId = str(id)
                     lastController = entity.controller
                     entity.controller.clientUpdate(backend.aiWorld, backend.entityGroup, iterator)
                 else:
                     engine.log.warning("Received controller packet with no matching entity. ID: " + str(id) + " Last entity updated: " + lastId + " - controller: " + str(lastController))
                     if sender != None and ((not id in self.requestedEntitySpawns.keys()) or (engine.clock.time - self.requestedEntitySpawns[id] > 2.0)): # Only send a request once every two seconds
                         p = net.Packet()
                         p.add(net.Uint8(net.PACKET_REQUESTSPAWNPACKET))
                         p.add(net.Uint8(id))
                         net.context.send(p, sender)
                         self.requestedEntitySpawns[id] = engine.clock.time
                         engine.log.info("Sending request for missing entity spawn packet. Entity ID: " + str(id))
                     return rebroadcast
             elif type == net.PACKET_SPAWN:
                 controllerType = net.Uint8.getFrom(iterator)
                 entity = controllers.types[controllerType].readSpawnPacket(backend.aiWorld, backend.entityGroup, iterator)
                 if entity.getId() in self.requestedEntitySpawns.keys():
                     del self.requestedEntitySpawns[entity.getId()]
                 if entity != None and backend.entityGroup.getEntity(entity.getId()) == None:
                     backend.entityGroup.addEntity(entity)
                 elif entity != None:
                     engine.log.warning("Spawned entity " + str(entity.getId()) + " already exists. Cancelling spawn.")
                     entity.delete(backend.entityGroup, killed = False, localDelete = False)
                 rebroadcast = True
             elif type == net.PACKET_DELETE:
                 id = net.Uint8.getFrom(iterator)
                 entity = backend.entityGroup.getEntity(id)
                 killed = net.Boolean.getFrom(iterator)
                 if entity != None:
                     if killed: # The boolean indicates that the entity was not only deleted, it was killed. Also, let the entity know this was a remote delete packet.
                         entity.kill(backend.aiWorld, backend.entityGroup, False)
                     else:
                         entity.delete(backend.entityGroup, False, False)
                 rebroadcast = True
             elif type == net.PACKET_REQUESTSPAWNPACKET:
                 self.clientSpawnPacketRequests.append((net.Uint8.getFrom(iterator), sender))
                 rebroadcast = False
             elif type == net.PACKET_SETUP:
                 if net.netMode == net.MODE_CLIENT:
                     messenger.send("client-setup", [iterator])
                 else:
                     return False
                 rebroadcast = False
             elif type == net.PACKET_CHAT:
                 messenger.send("chat-incoming", [net.String.getFrom(iterator), net.String.getFrom(iterator)]) # Username and message
                 rebroadcast = True
             elif type == net.PACKET_ENDMATCH:
                 engine.log.info("Received match end packet.")
                 messenger.send("end-match", [iterator])
                 rebroadcast = True
             elif type == net.PACKET_NEWCLIENT:
                 messenger.send("server-new-connection", [sender, net.String.getFrom(iterator)]) # Sender address and username
                 rebroadcast = False
             elif type == net.PACKET_DISCONNECT:
                 engine.log.info(net.addressToString(sender) + " disconnected.")
                 messenger.send("disconnect", [sender])
                 rebroadcast = False
             elif type == net.PACKET_SERVERFULL:
                 messenger.send("server-full")
             elif type == net.PACKET_CONFIRMREGISTER:
                 messenger.send("lobby-confirm-register")
                 rebroadcast = False
             elif type == net.PACKET_EMPTY:
                 rebroadcast = False
             elif type == net.PACKET_CLIENTREADY:
                 rebroadcast = False
                 messenger.send("client-ready", [sender])
             elif type == net.PACKET_NEWCLIENTNOTIFICATION:
                 address = net.String.getFrom(iterator)
                 port = net.Uint16.getFrom(iterator)
                 # Make sure we get all the data out of the packet to ensure proper processing.
                 # This packet has already been handled by the NetContext.
                 rebroadcast = False
             elif type == net.PACKET_ENTITYCHECKSUM:
                 checksum = net.Uint8.getFrom(iterator) # Number of active entities we're supposed to have
                 if net.netMode == net.MODE_CLIENT and checksum != len([x for x in backend.entityGroup.entities.values() if x.active and x.getId() < 256]):
                     # We don't have the right number of entities
                     p = net.Packet()
                     p.add(net.Uint8(net.PACKET_REQUESTENTITYLIST))
                     net.context.send(p, sender)
                     engine.log.info("Entity checksum failed. Requesting full entity list.")
                 rebroadcast = False
             elif type == net.PACKET_REQUESTENTITYLIST:
                 p = net.Packet()
                 p.add(net.Uint8(net.PACKET_ENTITYLIST))
                 entityList = [x for x in backend.entityGroup.entities.values() if x.active and x.getId() < 256]
                 p.add(net.Uint8(len(entityList)))
                 for entity in entityList:
                     p.add(net.Uint8(entity.getId()))
                 net.context.send(p, sender)
                 engine.log.info("Sending entity list to " + net.addressToString(sender))
                 rebroadcast = False
             elif type == net.PACKET_ENTITYLIST:
                 total = net.Uint8.getFrom(iterator)
                 entities = []
                 missingEntities = []
                 for _ in range(total):
                     id = net.Uint8.getFrom(iterator)
                     if id not in backend.entityGroup.entities.keys():
                         missingEntities.append(id)
                     entities.append(id)
                 # Delete any extra entities, assuming they aren't ones that we just spawned on our end.
                 for entity in (x for x in backend.entityGroup.entities.values() if x.active and x.getId() < 256):
                     if entity.getId() not in entities and engine.clock.time - entity.spawnTime > 5.0:
                         entity.delete(backend.entityGroup, False, False)
                 if len(missingEntities) > 0:
                     # Request spawn packets for any missing entities
                     p = net.Packet()
                     for id in missingEntities:
                         p.add(net.Uint8(net.PACKET_REQUESTSPAWNPACKET))
                         p.add(net.Uint8(id))
                         self.requestedEntitySpawns[id] = engine.clock.time
                         engine.log.info("Sending request for missing entity spawn packet. Entity ID: " + str(id))
                     net.context.send(p, sender)
                 rebroadcast = False
             else:
                 rebroadcast = False
     except AssertionError:
         engine.log.warning("Packet iteration failed. Discarding packet.")
         rebroadcast = False
     return rebroadcast