class PahoMqtt::Packet::Connect
Constants
- ATTR_DEFAULTS
Default attribute values
Attributes
clean_session[RW]
Set to false to keep a persistent session with the server
client_id[RW]
The client identifier string
keep_alive[RW]
Period the server should keep connection open for between pings
password[RW]
The password for authenticating with the server
protocol_level[RW]
The version number of the protocol
protocol_name[RW]
The name of the protocol
username[RW]
The username for authenticating with the server
will_payload[RW]
The payload of the Will message
will_qos[RW]
The QoS level to send the Will message as
will_retain[RW]
Set to true to make the Will message retained
will_topic[RW]
The topic name to send the Will message to
Public Class Methods
new(args={})
click to toggle source
Create a new Client
Connect
packet
Calls superclass method
PahoMqtt::Packet::Base::new
# File lib/paho_mqtt/packet/connect.rb, line 70 def initialize(args={}) super(ATTR_DEFAULTS.merge(args)) if version == '3.1.0' || version == '3.1' self.protocol_name ||= 'MQIsdp' self.protocol_level ||= 0x03 elsif version == '3.1.1' self.protocol_name ||= 'MQTT' self.protocol_level ||= 0x04 else raise PahoMqtt::PacketFormatException.new( "Unsupported protocol version: #{version}") end end
Public Instance Methods
check_version()
click to toggle source
# File lib/paho_mqtt/packet/connect.rb, line 109 def check_version if @version == '3.1.0' if @client_id.nil? || @client_id.bytesize < 1 raise PahoMqtt::PacketFormatException.new( "Client identifier too short while serialising packet") elsif @client_id.bytesize > 23 raise PahoMqtt::PacketFormatException.new( "Client identifier too long when serialising packet") end end end
encode_body()
click to toggle source
Get serialisation of packet's body
# File lib/paho_mqtt/packet/connect.rb, line 86 def encode_body body = '' check_version body += encode_string(@protocol_name) body += encode_bytes(@protocol_level.to_i) if @keep_alive < 0 raise PahoMqtt::PacketFormatException.new( "Invalid keep-alive value: cannot be less than 0") end body += encode_flags(@connect_flags) body += encode_short(@keep_alive) body += encode_string(@client_id) unless will_topic.nil? body += encode_string(@will_topic) # The MQTT v3.1 specification says that the payload is a UTF-8 string body += encode_string(@will_payload) end body += encode_string(@username) unless @username.nil? body += encode_string(@password) unless @password.nil? body end
encode_flags(flags)
click to toggle source
# File lib/paho_mqtt/packet/connect.rb, line 121 def encode_flags(flags) # Set the Connect flags flags = 0 flags |= 0x02 if @clean_session flags |= 0x04 unless @will_topic.nil? flags |= ((@will_qos & 0x03) << 3) flags |= 0x20 if @will_retain flags |= 0x40 unless @password.nil? flags |= 0x80 unless @username.nil? encode_bytes(flags) end
inspect()
click to toggle source
Returns a human readable string, summarising the properties of the packet
# File lib/paho_mqtt/packet/connect.rb, line 172 def inspect str = "\#<#{self.class}: " str += "keep_alive=#{keep_alive}" str += ", clean" if clean_session str += ", client_id='#{client_id}'" str += ", username='#{username}'" unless username.nil? str += ", password=..." unless password.nil? str += ">" end
parse_body(buffer)
click to toggle source
Parse the body (variable header and payload) of a Connect
packet
Calls superclass method
PahoMqtt::Packet::Base#parse_body
# File lib/paho_mqtt/packet/connect.rb, line 134 def parse_body(buffer) super(buffer) @protocol_name = shift_string(buffer) @protocol_level = shift_byte(buffer).to_i if @protocol_name == 'MQIsdp' && @protocol_level == 3 @version = '3.1.0' elsif @protocol_name == 'MQTT' && @protocol_level == 4 @version = '3.1.1' else raise PahoMqtt::PacketFormatException.new( "Unsupported protocol: #{@protocol_name}/#{@protocol_level}") end @connect_flags = shift_byte(buffer) @keep_alive = shift_short(buffer) @client_id = shift_string(buffer) parse_connect_flags(@connect_flag, buffer) end
parse_connect_flags(flags, buffer)
click to toggle source
# File lib/paho_mqtt/packet/connect.rb, line 153 def parse_connect_flags(flags, buffer) @clean_session = ((@connect_flags & 0x02) >> 1) == 0x01 if ((flags & 0x04) >> 2) == 0x01 # Last Will and Testament @will_qos = ((flags & 0x18) >> 3) @will_retain = ((flags & 0x20) >> 5) == 0x01 @will_topic = shift_string(buffer) # The MQTT v3.1 specification says that the payload is a UTF-8 string @will_payload = shift_string(buffer) end if ((@connect_flags & 0x80) >> 7) == 0x01 && buffer.bytesize > 0 @username = shift_string(buffer) end if ((@connect_flags & 0x40) >> 6) == 0x01 && buffer.bytesize > 0 @password = shift_string(buffer) end end