Exemple #1
0
    def fromString(content):
        msg = AppMessage()
        stream = io.BytesIO(content)
        ##read basic attrib
        ##msg id
        msg.id = serialize.readVariant(stream)
        ##type&success
        ##bin: 6bit type | 1bit success
        type_value = ord(stream.read(1))
        msg.type = type_value >> 1
        if type_value&0x01:
            msg.success = True
        else:
            msg.success = False
            
        ##sender&receiver
        msg.sender = serialize.readString(stream)
        msg.receiver = serialize.readString(stream)

        msg.session = serialize.readVariant(stream)
        msg.sequence = serialize.readVariant(stream)
        msg.transaction = serialize.readVariant(stream)
        msg.timestamp = serialize.readVariant(stream)
        msg.readParams(stream)
        stream.close()
        return msg
Exemple #2
0
    def readParams(self, stream):
        ## 2bytes: 11 bits key, 5 bits type
        data = stream.read(2)
        while 0 != len(data):
            key_value = ord(data[0])<<8|ord(data[1])
            value_type = key_value&0x1F
            key = key_value >> 5
            if self.param_type_uint == value_type:
                ##uint
                value = serialize.readVariant(stream)
                self.setUInt(key, value)
            elif self.param_type_bool == value_type:
                ##bool
                value = serialize.readVariant(stream)
                self.setBool(key, (1 == value))
            elif self.param_type_int == value_type:
                ##int
                value = serialize.readVariant(stream)
                self.setInt(key, serialize.zigzagDecode(value))
            elif self.param_type_string == value_type:
                ##string
                value = serialize.readString(stream)
                self.setString(key, value)
            elif self.param_type_float == value_type:
                ##float
                self.setFloat(key, serialize.readFloat(stream))
            elif self.param_type_uint_array == value_type:
                ##uint array
                count = serialize.readVariant(stream)
                array = []
                for i in range(count):
                    array.append(serialize.readVariant(stream))
                self.setUIntArray(key, array)
            elif self.param_type_string_array == value_type:
                ##string array
                count = serialize.readVariant(stream)
                array = []
                for i in range(count):
                    array.append(serialize.readString(stream))
                self.setStringArray(key, array)
            elif self.param_type_float_array == value_type:
                ##float array
                count = serialize.readVariant(stream)
                array = []
                for i in range(count):
                    array.append(serialize.readFloat(stream))
                self.setFloatArray(key, array)
            elif self.param_type_uint_array_array == value_type:
                ##uint array array
                count = serialize.readVariant(stream)
                array = []
                for i in range(count):
                    sub_count = serialize.readVariant(stream)
                    sub_array = []
                    for j in range(sub_count):                        
                        sub_array.append(serialize.readVariant(stream))
                    array.append(sub_array)
                self.setUIntArrayArray(key, array)

            elif self.param_type_string_array_array == value_type:
                ##string array array
                count = serialize.readVariant(stream)
                array = []
                for i in range(count):
                    sub_count = serialize.readVariant(stream)
                    sub_array = []
                    for j in range(sub_count):                        
                        sub_array.append(serialize.readString(stream))
                    array.append(sub_array)                
                self.setStringArrayArray(key, array)
            elif self.param_type_float_array_array == value_type:
                ##float array array
                count = serialize.readVariant(stream)
                array = []
                for i in range(count):
                    sub_count = serialize.readVariant(stream)
                    sub_array = []
                    for j in range(sub_count):                        
                        sub_array.append(serialize.readFloat(stream))
                    array.append(sub_array)
                self.setFloatArrayArray(key, array)

            ##next key
            data = stream.read(2)
def unpackageFromRawdata(data):
    result = []
    stream = io.BytesIO(data)
    command_type = serialize.readVariant(stream)
    while command_type is not None:
        session = serialize.readVariant(stream)
        if TransportCommand.type_connect_request == command_type:
            ##connect request
            command = ConnectRequest()
            command.session = session
            command.client_key = serialize.readString(stream)
            command.digest = serialize.readString(stream)
            command.sender = serialize.readVariant(stream)
            command.name = serialize.readString(stream)
            command.ip = serialize.readString(stream)
            command.port = serialize.readVariant(stream)
            result.append(command)
            
        elif TransportCommand.type_connect_response == command_type:
            ##connect response
            command = ConnectResponse()
            command.session = session
            bool_value = serialize.readVariant(stream)
            if 1 == (bool_value >> 1):
                command.success = True
            else:
                command.success = False
                
            if 1 == (bool_value&0x01):
                command.need_digest = True
            else:
                command.need_digest = False
            command.client_key = serialize.readString(stream)
            command.server_key = serialize.readString(stream)
            command.sender = serialize.readVariant(stream)
            command.name = serialize.readString(stream)
            command.ip = serialize.readString(stream)
            command.port = serialize.readVariant(stream)
            result.append(command)
            
        elif TransportCommand.type_connect_acknowledge == command_type:
            command = ConnectAcknowledge()
            command.session = session
            command.name = serialize.readString(stream)
            result.append(command)

        elif TransportCommand.type_disconnect_request == command_type:
            command = DisconnectRequest()
            command.session = session
            command.name = serialize.readString(stream)
            result.append(command)

        elif TransportCommand.type_disconnect_response == command_type:
            command = DisconnectResponse()
            command.session = session
            if 1 == serialize.readVariant(stream):
                command.success = True
            else:
                command.success = False
                
            result.append(command)
            
        elif TransportCommand.type_keep_alive == command_type:
            command = KeepAlive()
            command.session = session
            command.name = serialize.readString(stream)
            result.append(command)
            
        elif TransportCommand.type_message_data == command_type:
            command = MessageData()
            command.session = session
            command.serial = serialize.readVariant(stream)
            command.index = serialize.readVariant(stream)
            command.total = serialize.readVariant(stream)
            command.data = serialize.readString(stream)
            result.append(command)
            
            
        ##next command
        command_type = serialize.readVariant(stream)
##    print "unpackage %d commands from %d bytes"%(
##        len(result), len(data))
    return result