Class: CommandDeserializer

Inherits:
Object
  • Object
show all
Defined in:
lib/javonet-ruby-sdk/core/protocol/command_deserializer.rb,
lib/javonet-ruby-sdk/Binaries/Ruby/Linux/X64/core/protocol/command_deserializer.rb,
lib/javonet-ruby-sdk/Binaries/Ruby/MacOs/X64/core/protocol/command_deserializer.rb,
lib/javonet-ruby-sdk/Binaries/Ruby/Windows/X64/core/protocol/command_deserializer.rb

Instance Method Summary collapse

Constructor Details

#initialize(buffer, byte_array_len) ⇒ CommandDeserializer

Returns a new instance of CommandDeserializer.



9
10
11
12
13
14
# File 'lib/javonet-ruby-sdk/core/protocol/command_deserializer.rb', line 9

def initialize(buffer,byte_array_len)
    @buffer = buffer
    @byte_array_len = byte_array_len
    @command = Command.new(buffer[0], buffer[10], [])
    @position = 11
end

Instance Method Details

#decodeObject



20
21
22
23
24
25
# File 'lib/javonet-ruby-sdk/core/protocol/command_deserializer.rb', line 20

def decode
    until is_at_end
        @command = @command.add_arg_to_payload(read_object(@buffer[@position]))
    end
    return @command
end

#is_at_endObject



16
17
18
# File 'lib/javonet-ruby-sdk/core/protocol/command_deserializer.rb', line 16

def is_at_end
    return @position == @byte_array_len
end

#read_boolObject



95
96
97
98
99
100
101
102
103
# File 'lib/javonet-ruby-sdk/core/protocol/command_deserializer.rb', line 95

def read_bool
    p = @position
    size = @buffer[p + 1]
    @position += 2
    p = @position
    decoded_bool = TypeDeserializer.deserialize_bool(@buffer[p..p + size])
    @position += size
    return decoded_bool
end

#read_commandObject



54
55
56
57
58
59
60
61
62
63
# File 'lib/javonet-ruby-sdk/core/protocol/command_deserializer.rb', line 54

def read_command
    p = @position
    number_of_elements_in_payload = TypeDeserializer.deserialize_int(@buffer[p+1..p+4])
    runtime = @buffer[p + 5]
    command_type = @buffer[p + 6]

    @position += 7
    return_command = Command.new(runtime, command_type, [])
    return read_command_recursively(number_of_elements_in_payload, return_command)
end

#read_command_recursively(number_of_elements_in_payload_left, cmd) ⇒ Object



65
66
67
68
69
70
71
72
73
74
# File 'lib/javonet-ruby-sdk/core/protocol/command_deserializer.rb', line 65

def read_command_recursively(number_of_elements_in_payload_left, cmd)
    if number_of_elements_in_payload_left == 0
        return cmd
    else
        p = @position
        new_command = cmd.add_arg_to_payload(self.read_object(@buffer[p]))
        return read_command_recursively(number_of_elements_in_payload_left - 1, new_command)
    end

end

#read_doubleObject



117
118
119
120
121
122
123
124
125
# File 'lib/javonet-ruby-sdk/core/protocol/command_deserializer.rb', line 117

def read_double
    p = @position
    size = @buffer[p + 1]
    @position += 2
    p = @position
    decoded_double = TypeDeserializer.deserialize_double(@buffer[p..p + size -1])
    @position += size
    return decoded_double
end

#read_floatObject



106
107
108
109
110
111
112
113
114
# File 'lib/javonet-ruby-sdk/core/protocol/command_deserializer.rb', line 106

def read_float
    p = @position
    size = @buffer[p + 1]
    @position += 2
    p = @position
    decoded_float = TypeDeserializer.deserialize_float(@buffer[p..p + size - 1])
    @position += size
    return decoded_float
end

#read_intObject



76
77
78
79
80
81
# File 'lib/javonet-ruby-sdk/core/protocol/command_deserializer.rb', line 76

def read_int
    @position += 2
    p = @position
    @position += 4
    return TypeDeserializer.deserialize_int(@buffer[p..p + 4 - 1])
end

#read_object(type_num) ⇒ Object

def copy_from(self, bytes_to_copy, elements_to_skip):

size = len(bytes_to_copy) - elements_to_skip
new_byte_array = bytes_to_copy[size]

return new_byte_array


34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/javonet-ruby-sdk/core/protocol/command_deserializer.rb', line 34

def read_object(type_num)
    type_value = type_num
    if type_value == Type::COMMAND
        return self.read_command
    elsif type_value == Type::JAVONET_INTEGER
        return self.read_int
    elsif type_value == Type::JAVONET_STRING
        return self.read_string
    elsif type_value == Type::JAVONET_BOOLEAN
        return self.read_bool
    elsif type_value == Type::JAVONET_FLOAT
        return self.read_float
    elsif type_value == Type::JAVONET_DOUBLE
        return self.read_double
    else
        Exception("Type not supported")
    end
end

#read_stringObject



84
85
86
87
88
89
90
91
92
93
# File 'lib/javonet-ruby-sdk/core/protocol/command_deserializer.rb', line 84

def read_string
    p = @position
    string_encoding_mode = @buffer[p+1]
    size = TypeDeserializer.deserialize_int(@buffer[p+2..p + 5])
    @position += 6
    p = @position
    decoded_string = TypeDeserializer.deserialize_string(string_encoding_mode, @buffer[p..p + size-1])
    @position += size
    return decoded_string
end