Class: MQTT::Packet::Connect
- Inherits:
-
MQTT::Packet
- Object
- MQTT::Packet
- MQTT::Packet::Connect
- Defined in:
- lib/mqtt/packet.rb
Overview
Class representing an MQTT Connect Packet
Constant Summary collapse
- ATTR_DEFAULTS =
Default attribute values
{ client_id: nil, clean_session: true, keep_alive: 15, will_topic: nil, will_qos: 0, will_retain: false, will_payload: '', username: nil, password: nil }.freeze
Instance Attribute Summary collapse
-
#clean_session ⇒ Object
Set to false to keep a persistent session with the server.
-
#client_id ⇒ Object
The client identifier string.
-
#keep_alive ⇒ Object
Period the server should keep connection open for between pings.
-
#password ⇒ Object
The password for authenticating with the server.
-
#protocol_level ⇒ Object
The version number of the protocol.
-
#protocol_name ⇒ Object
The name of the protocol.
-
#username ⇒ Object
The username for authenticating with the server.
-
#will_payload ⇒ Object
The payload of the Will message.
-
#will_qos ⇒ Object
The QoS level to send the Will message as.
-
#will_retain ⇒ Object
Set to true to make the Will message retained.
-
#will_topic ⇒ Object
The topic name to send the Will message to.
Attributes inherited from MQTT::Packet
#body_length, #flags, #id, #version
Instance Method Summary collapse
-
#encode_body ⇒ Object
Get serialisation of packet’s body.
-
#initialize(args = {}) ⇒ Connect
constructor
Create a new Client Connect packet.
-
#inspect ⇒ Object
Returns a human readable string, summarising the properties of the packet.
-
#parse_body(buffer) ⇒ Object
Parse the body (variable header and payload) of a Connect packet.
-
#protocol_version ⇒ Object
deprecated
Deprecated.
Please use #protocol_level instead
-
#protocol_version=(args) ⇒ Object
deprecated
Deprecated.
Please use #protocol_level= instead
Methods inherited from MQTT::Packet
create_from_header, #dup, #message_id, #message_id=, parse, parse_header, read, read_byte, #to_s, #type_id, #type_name, #update_attributes, #validate_flags
Constructor Details
#initialize(args = {}) ⇒ Connect
Create a new Client Connect packet
442 443 444 445 446 447 448 449 450 451 452 453 454 455 |
# File 'lib/mqtt/packet.rb', line 442 def initialize(args = {}) super(ATTR_DEFAULTS.merge(args)) case version when '3.1.0', '3.1' self.protocol_name ||= 'MQIsdp' self.protocol_level ||= 0x03 when '3.1.1' self.protocol_name ||= 'MQTT' self.protocol_level ||= 0x04 else raise ArgumentError, "Unsupported protocol version: #{version}" end end |
Instance Attribute Details
#clean_session ⇒ Object
Set to false to keep a persistent session with the server
405 406 407 |
# File 'lib/mqtt/packet.rb', line 405 def clean_session @clean_session end |
#client_id ⇒ Object
The client identifier string
402 403 404 |
# File 'lib/mqtt/packet.rb', line 402 def client_id @client_id end |
#keep_alive ⇒ Object
Period the server should keep connection open for between pings
408 409 410 |
# File 'lib/mqtt/packet.rb', line 408 def keep_alive @keep_alive end |
#password ⇒ Object
The password for authenticating with the server
426 427 428 |
# File 'lib/mqtt/packet.rb', line 426 def password @password end |
#protocol_level ⇒ Object
The version number of the protocol
399 400 401 |
# File 'lib/mqtt/packet.rb', line 399 def protocol_level @protocol_level end |
#protocol_name ⇒ Object
The name of the protocol
396 397 398 |
# File 'lib/mqtt/packet.rb', line 396 def protocol_name @protocol_name end |
#username ⇒ Object
The username for authenticating with the server
423 424 425 |
# File 'lib/mqtt/packet.rb', line 423 def username @username end |
#will_payload ⇒ Object
The payload of the Will message
420 421 422 |
# File 'lib/mqtt/packet.rb', line 420 def will_payload @will_payload end |
#will_qos ⇒ Object
The QoS level to send the Will message as
414 415 416 |
# File 'lib/mqtt/packet.rb', line 414 def will_qos @will_qos end |
#will_retain ⇒ Object
Set to true to make the Will message retained
417 418 419 |
# File 'lib/mqtt/packet.rb', line 417 def will_retain @will_retain end |
#will_topic ⇒ Object
The topic name to send the Will message to
411 412 413 |
# File 'lib/mqtt/packet.rb', line 411 def will_topic @will_topic end |
Instance Method Details
#encode_body ⇒ Object
Get serialisation of packet’s body
458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 |
# File 'lib/mqtt/packet.rb', line 458 def encode_body body = '' if @version == '3.1.0' raise 'Client identifier too short while serialising packet' if @client_id.nil? || @client_id.bytesize < 1 raise 'Client identifier too long when serialising packet' if @client_id.bytesize > 23 end body += encode_string(@protocol_name) body += encode_bytes(@protocol_level.to_i) raise 'Invalid keep-alive value: cannot be less than 0' if @keep_alive < 0 # Set the Connect flags @connect_flags = 0 @connect_flags |= 0x02 if @clean_session @connect_flags |= 0x04 unless @will_topic.nil? @connect_flags |= ((@will_qos & 0x03) << 3) @connect_flags |= 0x20 if @will_retain @connect_flags |= 0x40 unless @password.nil? @connect_flags |= 0x80 unless @username.nil? body += encode_bytes(@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 |
#inspect ⇒ Object
Returns a human readable string, summarising the properties of the packet
525 526 527 528 529 530 531 532 533 |
# File 'lib/mqtt/packet.rb', line 525 def inspect str = "\#<#{self.class}: " \ "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) ⇒ Object
Parse the body (variable header and payload) of a Connect packet
494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 |
# File 'lib/mqtt/packet.rb', line 494 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 ProtocolException, "Unsupported protocol: #{@protocol_name}/#{@protocol_level}" end @connect_flags = shift_byte(buffer) @clean_session = ((@connect_flags & 0x02) >> 1) == 0x01 @keep_alive = shift_short(buffer) @client_id = shift_string(buffer) if ((@connect_flags & 0x04) >> 2) == 0x01 # Last Will and Testament @will_qos = ((@connect_flags & 0x18) >> 3) @will_retain = ((@connect_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 @username = shift_string(buffer) if ((@connect_flags & 0x80) >> 7) == 0x01 && buffer.bytesize > 0 if ((@connect_flags & 0x40) >> 6) == 0x01 && buffer.bytesize > 0 # rubocop: disable Style/GuardClause @password = shift_string(buffer) end end |
#protocol_version ⇒ Object
Please use #protocol_level instead
538 539 540 |
# File 'lib/mqtt/packet.rb', line 538 def protocol_version protocol_level end |
#protocol_version=(args) ⇒ Object
Please use #protocol_level= instead
543 544 545 |
# File 'lib/mqtt/packet.rb', line 543 def protocol_version=(args) self.protocol_level = args end |