Ejemplo n.º 1
0
    def enterSetAvatar(self):
        channel = self.mgr.GetAccountConnectionChannel(self.target)

        datagramCleanup = PyDatagram()
        datagramCleanup.addServerHeader(self.playerId, channel, STATESERVER_OBJECT_DELETE_RAM)
        datagramCleanup.addUint32(self.playerId)
        datagram = PyDatagram()
        datagram.addServerHeader(channel, self.air.ourChannel, CLIENTAGENT_ADD_POST_REMOVE)
        datagram.addUint16(datagramCleanup.getLength())
        datagram.appendData(datagramCleanup.getMessage())
        self.air.send(datagram)

        # Activate the avatar on the DBSS:
        self.air.sendActivate(self.playerId, 0, 0, self.air.dclassesByName['DistributedPlayerUD'],
                              fields={'setName': [self.token]})

        # Next, add them to the avatar channel:
        datagram = PyDatagram()
        datagram.addServerHeader(channel, self.air.ourChannel, CLIENTAGENT_OPEN_CHANNEL)
        datagram.addChannel(self.mgr.GetPuppetConnectionChannel(self.target))
        self.air.send(datagram)

        # Finally, grant ownership and shut down.
        self.air.setOwner(self.playerId, self.target)

        self.air.clientAddSessionObject(self.target, self.playerId)

        # Now set their sender channel to represent their account affiliation:
        datagram = PyDatagram()
        datagram.addServerHeader(self.target, self.air.ourChannel, CLIENTAGENT_SET_CLIENT_ID)
        datagram.addChannel(self.mgr.GetPuppetConnectionChannel(self.playerId))
        self.air.send(datagram)
        self.demand('Done')
Ejemplo n.º 2
0
class Packet():
    
    (
    PC_REQUEST_ENVIRONMENT,
    PC_START_ENVIRONMENT_STREAM,
    PC_CONT_ENVIRONMENT_STREAM,
    PC_END_ENVIRONMENT_STREAM,
    PC_ACK_END_ENVIRONMENT_STREAM,
    PC_WORLD_SEED,
    PC_ENGINE_LOADED,
    PC_TEAM_SELECT,
    PC_PLAYER_DEATH,
    PC_PLAYER_RESPAWN,
    PC_REQUEST_INFO,
    PC_REQUEST_RESPONSE,
    PC_SERVER_INFO,
    PC_REQUEST_JOIN,
    PC_REQUEST_JOIN_RESPONSE,
    PC_PLAYER_JOINED,
    PC_CONNECTED_PLAYERS,
    PC_CLIENT_PLAYER_STATE,
    PC_SERVER_PLAYER_STATE,
    PC_CLIENT_READY,
    PC_CLIENT_CHANGE_ITEM,
    PC_CLIENT_RELOAD,
    PC_GAME_STATE,
    PC_RELIABLE_STATE,
    PC_CLIENT_DISCONNECT,
    PC_GO_AWAY,
    PC_PLAYER_DISCONNECT,
    PC_CLIENT_CHAT_MESSAGE,
    PC_SERVER_CHAT_MESSAGE,
    PC_SERVER_ENVIRONMENT_CHANGE,
    PC_SCOREBOARD,
    PC_UNRELIABLE_PACKET,
    PC_RELIABLE_PACKET,
    PC_TCP_PACKET,
    PC_EMPTY
    ) = range(35)
    
    def __init__(self):
        self.dg = PyDatagram()
        
    def AddBool(self, value):
        if(value):
            self.dg.addBool(True)
        else:
            self.dg.addBool(False)
        
    def AddUint8(self, value):
        self.dg.addUint8(value)
        
    def AddUint16(self, value):
        self.dg.addUint16(value)
        
    def AddUint32(self, value):
        self.dg.addUint32(value)
        
    def AddFloat32(self, value):
        self.dg.addFloat32(value)
        
    def GetDatagram(self):
        return self.dg
    
    def GetDatagramSize(self):
        return self.dg.getLength()
    
    def AddFixedString(self, text):
        n = len(text)
        self.dg.addUint8(n)
        self.dg.addFixedString(text, n)
        
    def AddString(self, text):
        self.dg.addFixedString(text, len(text))
        
    def GetLength(self):
        return self.dg.getLength()
        
    @staticmethod
    def GetFixedString(data):
        length = data.getUint8()
        return data.getFixedString(length)
    
    @staticmethod
    def GetRemainingAsString(data):
        length = data.getRemainingSize()
        return data.getFixedString(length)
    
    @staticmethod
    def PeerAddrToIpPort(peerAddr):
        return '%s:%s' % (peerAddr.getIpString(), peerAddr.getPort())
    
    @staticmethod
    def BitsToInt16(bits):
        return int(''.join(bits), 2)
    
    @staticmethod
    def BitsToInt32(bits):
        return int(''.join(bits), 2)
    
    @staticmethod
    # http://www.daniweb.com/software-development/python/code/216539
    def Int16ToBits(int16):
        return list(''.join([str((int16 >> y) & 1) for y in range(16-1, -1, -1)]))
    
    @staticmethod
    def Int32ToBits(int32):
        return list(''.join([str((int32 >> y) & 1) for y in range(32-1, -1, -1)]))