mqtt-ccutrer 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.md +21 -0
- data/NEWS.md +173 -0
- data/README.md +218 -0
- data/lib/mqtt-ccutrer.rb +3 -0
- data/lib/mqtt.rb +61 -0
- data/lib/mqtt/client.rb +772 -0
- data/lib/mqtt/packet.rb +1055 -0
- data/lib/mqtt/proxy.rb +117 -0
- data/lib/mqtt/sn/packet.rb +714 -0
- data/lib/mqtt/version.rb +6 -0
- data/spec/zz_client_integration_spec.rb +180 -0
- metadata +182 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fbcc93715636fd1a6f3491005dccf8c9805c519145145154a9895d5fb3df0670
|
4
|
+
data.tar.gz: f978d8185287327b475f69881546dde182fbbd3c9d665253d9625bc48df1f9a9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 53cb56f81cd0eed1d41d6a0c5a7b7fcb88e53f5fcea755cdf544715d38fd698b931c7b5d23bbf161709a0f46fe72ce14a0f0107f2bfe5f59e92225c72d8d0556
|
7
|
+
data.tar.gz: 845ec674c88c7be5b7835adeb1d6b52397661f3e02ae775240cb2621058eba72956327ca961c0ce82172a13485faee720d9b0c9c37e99f03643f1918d5d0d203
|
data/LICENSE.md
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2009-2013 Nicholas J Humfrey
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/NEWS.md
ADDED
@@ -0,0 +1,173 @@
|
|
1
|
+
Ruby MQTT NEWS
|
2
|
+
==============
|
3
|
+
|
4
|
+
Ruby MQTT Version 1.0.0 (2021-02-19) (CCutrer fork)
|
5
|
+
---------------------------------------------------
|
6
|
+
* Increase minimum Ruby version to 2.5
|
7
|
+
* Change several methods to take kwargs
|
8
|
+
* Remove `get` vs. `get_packet`; just always return packets from get
|
9
|
+
* `get` no longer takes an optional topic to subscribe to; just call
|
10
|
+
`subscribe`
|
11
|
+
* Remove `last_ping_response` since it's not recorded anymore
|
12
|
+
* Remove deprecated `remote_host` and `remote_port`
|
13
|
+
* `connect` no longer takes an optional client id; just set it beforehand
|
14
|
+
* Add `batch_publish` method for improving performance of QoS 1 publishes
|
15
|
+
* Add `flush` method to ensure writes have finished, since writes are
|
16
|
+
now done in a background thread
|
17
|
+
* Add `wait_for_ack` param to `subscribe` and `unsubscribe`
|
18
|
+
* Automatic reconnects
|
19
|
+
* Re-send Pub, Sub, and Unsub packets that don't get acked, even across
|
20
|
+
server disconnects
|
21
|
+
* Only send keepalive pings if we haven't received any other packets,
|
22
|
+
and measure from the last packet received, instead of the last ping
|
23
|
+
sent
|
24
|
+
* Improve CPU usage by only checking for timeouts at the time of the
|
25
|
+
timeout, instead of polling
|
26
|
+
|
27
|
+
Ruby MQTT Version 0.5.0 (2017-04-16)
|
28
|
+
------------------------------------
|
29
|
+
|
30
|
+
* Switched default protocol version to 3.1.1
|
31
|
+
* Added support for Server Name Identification (SNI)
|
32
|
+
* Fix for unescaping user/password in URI
|
33
|
+
* Fix for bug in MQTT::Proxy class
|
34
|
+
* Add the ability to ignore retained packets when subscribed.
|
35
|
+
* Fix problem of wrong Puback packet ID
|
36
|
+
* Don't keepalive ping if disconnected
|
37
|
+
* Immediately close socket after failed Connack
|
38
|
+
* FakeServer improvements
|
39
|
+
* Fix for working with mathn library.
|
40
|
+
|
41
|
+
|
42
|
+
Ruby MQTT Version 0.4.0 (2016-06-27)
|
43
|
+
------------------------------------
|
44
|
+
|
45
|
+
* Added puback handling for QoS level 1
|
46
|
+
* Low-level MQTT-SN packet parsing support
|
47
|
+
* Allow certs to be set directly instead of just by file
|
48
|
+
* Allow keyphrase for certs to be passed through
|
49
|
+
* Put 'disconnect' inside an 'ensure' block
|
50
|
+
* Fix for error on publish with frozen payload
|
51
|
+
* Fix for packets always getting id 1
|
52
|
+
* Improvements to tests
|
53
|
+
|
54
|
+
|
55
|
+
Ruby MQTT Version 0.3.1 (2014-10-10)
|
56
|
+
------------------------------------
|
57
|
+
|
58
|
+
* Added ```last_ping_response``` to attribute to ```MQTT::Client```
|
59
|
+
|
60
|
+
|
61
|
+
Ruby MQTT Version 0.3.0 (2014-08-26)
|
62
|
+
------------------------------------
|
63
|
+
|
64
|
+
* Added support for MQTT protocol version 3.1.1
|
65
|
+
* Renamed a number of methods/attributes:
|
66
|
+
- Renamed ```:granted_qos``` to ```:return_codes```
|
67
|
+
- Renamed ```:remote_port``` to ```:port```
|
68
|
+
- Renamed ```:remote_host``` to ```:host```
|
69
|
+
- Renamed ```:message_id``` to ```:id```
|
70
|
+
- Renamed ```:protocol_version``` to ```:protocol_level```
|
71
|
+
- Renamed ```MQTT_BROKER``` environment variable to ```MQTT_SERVER```
|
72
|
+
* Added more checks to ensure that the 3.1.1 protocol specs are adhered to
|
73
|
+
* Added a Library Overview section to the README
|
74
|
+
* Added links to the protocol specification to README
|
75
|
+
* Improvements to the YARD API documentation
|
76
|
+
* Don't display payload in inspect if it contains non-visible ASCII characters
|
77
|
+
* Upgraded to rspec 3
|
78
|
+
* Various minor bug fixes and corrections
|
79
|
+
|
80
|
+
|
81
|
+
Ruby MQTT Version 0.2.0 (2014-04-02)
|
82
|
+
------------------------------------
|
83
|
+
|
84
|
+
* Added SSL/TLS support
|
85
|
+
* Added support for passing connection details using a URI
|
86
|
+
* Added support for using the ```MQTT_BROKER``` environment variable
|
87
|
+
* Allow passing array of topics to Client#unsubscribe
|
88
|
+
* Allow more combinations of arguments to be passed to a new Client
|
89
|
+
* No longer defaults to ‘localhost’ if there is no server configured
|
90
|
+
* Fixed more 'unused variable' warnings
|
91
|
+
* Documentation improvements
|
92
|
+
* Ruby 1.8 fixes
|
93
|
+
* Ruby 2 fixes
|
94
|
+
|
95
|
+
|
96
|
+
Ruby MQTT Version 0.1.0 (2013-09-07)
|
97
|
+
------------------------------------
|
98
|
+
|
99
|
+
* Changed license to MIT, to simplify licensing concerns
|
100
|
+
* Improvements for UTF-8 handling under Ruby 1.9
|
101
|
+
* Added ```get_packet``` method
|
102
|
+
* Added support for a keep-alive value of 0
|
103
|
+
* Added a #inspect method to the Packet classes
|
104
|
+
* Added checks for the protocol name and version
|
105
|
+
* Added check to ensure that packet body isn't too big
|
106
|
+
* Added validation of QoS value
|
107
|
+
* Added example of using authentication
|
108
|
+
* Fixed 'unused variable' warnings
|
109
|
+
* Reduced duplicated code in packet parsing
|
110
|
+
* Improved testing
|
111
|
+
- Created fake server and integration tests
|
112
|
+
- Better test coverage
|
113
|
+
- Added more tests for error states
|
114
|
+
|
115
|
+
|
116
|
+
Ruby MQTT Version 0.0.9 (2012-12-21)
|
117
|
+
------------------------------------
|
118
|
+
|
119
|
+
* Fixes for Ruby 1.9.3 by Mike English
|
120
|
+
* Fix for ```client_id``` typo by Anubisss
|
121
|
+
* Added methods to inspect the incoming message queue: ```queue_empty?``` and ```queue_length```
|
122
|
+
* Fixed incorrect implementation of the parsing and serialising of Subscription Acknowledgement packets
|
123
|
+
* Changed test mocking from Mocha to rspec-mocks
|
124
|
+
|
125
|
+
|
126
|
+
Ruby MQTT Version 0.0.8 (2011-02-04)
|
127
|
+
------------------------------------
|
128
|
+
|
129
|
+
* Implemented Last Will and Testament feature
|
130
|
+
* Renamed dup attribute to duplicate to avoid method name clash
|
131
|
+
* Made the random ```client_id``` generator a public class method
|
132
|
+
|
133
|
+
|
134
|
+
Ruby MQTT Version 0.0.7 (2011-01-19)
|
135
|
+
------------------------------------
|
136
|
+
|
137
|
+
* You can now pass a topic and block to client.get
|
138
|
+
* Added MQTT::Client.connect class method
|
139
|
+
|
140
|
+
|
141
|
+
Ruby MQTT Version 0.0.5 (2011-01-18)
|
142
|
+
------------------------------------
|
143
|
+
|
144
|
+
* Implemented setting username and password (MQTT 3.1)
|
145
|
+
* Renamed ```clean_start``` to ``clean_session```
|
146
|
+
* Started using autoload to load classes
|
147
|
+
* Modernised Gem building mechanisms
|
148
|
+
|
149
|
+
|
150
|
+
Ruby MQTT Version 0.0.4 (2009-02-22)
|
151
|
+
------------------------------------
|
152
|
+
|
153
|
+
* Re-factored packet encoding/decoding into one class per packet type
|
154
|
+
* Added MQTT::Proxy class for implementing an MQTT proxy
|
155
|
+
|
156
|
+
|
157
|
+
Ruby MQTT Version 0.0.3 (2009-02-08)
|
158
|
+
------------------------------------
|
159
|
+
|
160
|
+
* Added checking of Connection Acknowledgement
|
161
|
+
* Automatic client identifier generation
|
162
|
+
|
163
|
+
|
164
|
+
Ruby MQTT Version 0.0.2 (2009-02-03)
|
165
|
+
------------------------------------
|
166
|
+
|
167
|
+
* Added support for packets longer than 127 bytes
|
168
|
+
|
169
|
+
|
170
|
+
Ruby MQTT Version 0.0.1 (2009-02-01)
|
171
|
+
------------------------------------
|
172
|
+
|
173
|
+
* Initial Release
|
data/README.md
ADDED
@@ -0,0 +1,218 @@
|
|
1
|
+
[](https://travis-ci.org/ccutrer/ruby-mqtt)
|
2
|
+
|
3
|
+
ruby-mqtt
|
4
|
+
=========
|
5
|
+
|
6
|
+
Pure Ruby gem that implements the [MQTT] protocol, a lightweight protocol for publish/subscribe messaging.
|
7
|
+
|
8
|
+
Also includes a class for parsing and generating [MQTT-SN] packets.
|
9
|
+
|
10
|
+
|
11
|
+
Table of Contents
|
12
|
+
-----------------
|
13
|
+
* [Installation](#installation)
|
14
|
+
* [Quick Start](#quick-start)
|
15
|
+
* [Library Overview](#library-overview)
|
16
|
+
* [Resources](#resources)
|
17
|
+
* [License](#license)
|
18
|
+
* [Contact](#contact)
|
19
|
+
|
20
|
+
|
21
|
+
Installation
|
22
|
+
------------
|
23
|
+
|
24
|
+
You may get the latest stable version from [Rubygems]:
|
25
|
+
|
26
|
+
$ gem install mqtt-ccutrer
|
27
|
+
|
28
|
+
Quick Start
|
29
|
+
-----------
|
30
|
+
|
31
|
+
~~~ ruby
|
32
|
+
require 'mqtt'
|
33
|
+
|
34
|
+
# Publish example
|
35
|
+
MQTT::Client.connect('test.mosquitto.org') do |c|
|
36
|
+
c.publish('test', 'message')
|
37
|
+
end
|
38
|
+
|
39
|
+
# Subscribe example
|
40
|
+
MQTT::Client.connect('test.mosquitto.org') do |c|
|
41
|
+
# If you pass a block to the get method, then it will loop
|
42
|
+
c.subscribe('test')
|
43
|
+
c.get do |packet|
|
44
|
+
puts "#{packet.topic}: #{packet.payload}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
~~~
|
48
|
+
|
49
|
+
|
50
|
+
Library Overview
|
51
|
+
----------------
|
52
|
+
|
53
|
+
### Connecting ###
|
54
|
+
|
55
|
+
A new client connection can be created by passing either a [MQTT URI], a host and port or by passing a hash of attributes.
|
56
|
+
|
57
|
+
~~~ ruby
|
58
|
+
client = MQTT::Client.connect('mqtt://myserver.example.com')
|
59
|
+
client = MQTT::Client.connect('mqtts://user:pass@myserver.example.com')
|
60
|
+
client = MQTT::Client.connect('myserver.example.com')
|
61
|
+
client = MQTT::Client.connect('myserver.example.com', 18830)
|
62
|
+
client = MQTT::Client.connect(host: 'myserver.example.com', port: 1883 ... )
|
63
|
+
~~~
|
64
|
+
|
65
|
+
TLS/SSL is not enabled by default, to enabled it, pass `ssl: true`:
|
66
|
+
|
67
|
+
~~~ ruby
|
68
|
+
client = MQTT::Client.connect(
|
69
|
+
host: 'test.mosquitto.org',
|
70
|
+
port: 8883,
|
71
|
+
ssl: true
|
72
|
+
)
|
73
|
+
~~~
|
74
|
+
|
75
|
+
Alternatively you can create a new Client object and then configure it by setting attributes. This example shows setting up client certificate based authentication:
|
76
|
+
|
77
|
+
~~~ ruby
|
78
|
+
client = MQTT::Client.new
|
79
|
+
client.host = 'myserver.example.com'
|
80
|
+
client.ssl = true
|
81
|
+
client.cert_file = path_to('client.pem')
|
82
|
+
client.key_file = path_to('client.key')
|
83
|
+
client.ca_file = path_to('root-ca.pem')
|
84
|
+
client.connect
|
85
|
+
~~~
|
86
|
+
|
87
|
+
The connection can either be made without the use of a block:
|
88
|
+
|
89
|
+
~~~ ruby
|
90
|
+
client = MQTT::Client.connect('test.mosquitto.org')
|
91
|
+
# perform operations
|
92
|
+
client.disconnect
|
93
|
+
~~~
|
94
|
+
|
95
|
+
Or, if using a block, with an implicit disconnection at the end of the block.
|
96
|
+
|
97
|
+
~~~ ruby
|
98
|
+
MQTT::Client.connect('test.mosquitto.org') do |client|
|
99
|
+
# perform operations
|
100
|
+
end
|
101
|
+
~~~
|
102
|
+
|
103
|
+
For more information, see the list of attributes for the [MQTT::Client] class and the [MQTT::Client.connect] method.
|
104
|
+
|
105
|
+
|
106
|
+
### Publishing ###
|
107
|
+
|
108
|
+
To send a message to a topic, use the ```publish``` method:
|
109
|
+
|
110
|
+
~~~ ruby
|
111
|
+
client.publish(topic, payload, retain: false, qos: 0)
|
112
|
+
~~~
|
113
|
+
|
114
|
+
The method will return once the message has been sent to the MQTT server for QoS 0,
|
115
|
+
or once an Ack has been received from the server for QoS 1.
|
116
|
+
|
117
|
+
For more information see the [MQTT::Client#publish] method.
|
118
|
+
|
119
|
+
|
120
|
+
### Subscribing ###
|
121
|
+
|
122
|
+
You can send a subscription request to the MQTT server using the subscribe method. One or more [Topic Filters] may be passed in:
|
123
|
+
|
124
|
+
~~~ ruby
|
125
|
+
client.subscribe( 'topic1' )
|
126
|
+
client.subscribe( 'topic1', 'topic2' )
|
127
|
+
client.subscribe( 'foo/#' )
|
128
|
+
~~~
|
129
|
+
|
130
|
+
For more information see the [MQTT::Client#subscribe] method.
|
131
|
+
|
132
|
+
|
133
|
+
### Receiving Messages ###
|
134
|
+
|
135
|
+
To receive a message, use the get method. This method will block until a message is available. You can access details
|
136
|
+
about the packet such as if it was retained, the topic it was sent to, and the payload.
|
137
|
+
|
138
|
+
~~~ ruby
|
139
|
+
packet = client.get
|
140
|
+
packet.retained?
|
141
|
+
packet.topic
|
142
|
+
packet.payload
|
143
|
+
~~~
|
144
|
+
|
145
|
+
Alternatively, you can give the get method a block, which will be called for every message received and loop forever:
|
146
|
+
|
147
|
+
~~~ ruby
|
148
|
+
client.get do |packet|
|
149
|
+
# Block is executed for every message received
|
150
|
+
end
|
151
|
+
~~~
|
152
|
+
|
153
|
+
For more information see the [MQTT::Client#get] method.
|
154
|
+
|
155
|
+
|
156
|
+
### Parsing and serialising of packets ###
|
157
|
+
|
158
|
+
The parsing and serialising of MQTT and MQTT-SN packets is a separate lower-level API.
|
159
|
+
You can use it to build your own clients and servers, without using any of the rest of the
|
160
|
+
code in this gem.
|
161
|
+
|
162
|
+
~~~ ruby
|
163
|
+
# Parse a string containing a binary packet into an object
|
164
|
+
packet_obj = MQTT::Packet.parse(binary_packet)
|
165
|
+
|
166
|
+
# Write a PUBACK packet to an IO handle
|
167
|
+
ios << MQTT::Packet::Puback(id: 20)
|
168
|
+
|
169
|
+
# Write an MQTT-SN Publish packet with QoS -1 to a UDP socket
|
170
|
+
socket = UDPSocket.new
|
171
|
+
socket.connect('localhost', MQTT::SN::DEFAULT_PORT)
|
172
|
+
socket << MQTT::SN::Packet::Publish.new(
|
173
|
+
topic_id: 'TT',
|
174
|
+
topic_id_type: :short,
|
175
|
+
data: "The time is: #{Time.now}",
|
176
|
+
qos: -1
|
177
|
+
)
|
178
|
+
socket.close
|
179
|
+
~~~
|
180
|
+
|
181
|
+
Limitations
|
182
|
+
-----------
|
183
|
+
|
184
|
+
* QoS 2 is not currently supported by client
|
185
|
+
* Pending publishes are only persisted as long as a reconnect occurs within
|
186
|
+
the configured timeout
|
187
|
+
|
188
|
+
Resources
|
189
|
+
---------
|
190
|
+
|
191
|
+
* API Documentation: http://rubydoc.info/gems/mqtt
|
192
|
+
* Protocol Specification v3.1.1: http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html
|
193
|
+
* Protocol Specification v3.1: http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html
|
194
|
+
* MQTT-SN Protocol Specification v1.2: http://mqtt.org/new/wp-content/uploads/2009/06/MQTT-SN_spec_v1.2.pdf
|
195
|
+
* MQTT Homepage: http://www.mqtt.org/
|
196
|
+
* GitHub Project: http://github.com/njh/ruby-mqtt
|
197
|
+
|
198
|
+
|
199
|
+
License
|
200
|
+
-------
|
201
|
+
|
202
|
+
The mqtt ruby gem is licensed under the terms of the MIT license.
|
203
|
+
See the file LICENSE for details.
|
204
|
+
|
205
|
+
|
206
|
+
[MQTT]: http://www.mqtt.org/
|
207
|
+
[MQTT-SN]: http://mqtt.org/2013/12/mqtt-for-sensor-networks-mqtt-sn
|
208
|
+
[Rubygems]: http://rubygems.org/
|
209
|
+
[Bundler]: http://bundler.io/
|
210
|
+
[MQTT URI]: https://github.com/mqtt/mqtt.github.io/wiki/URI-Scheme
|
211
|
+
[Topic Filters]: http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html#_Toc388534397
|
212
|
+
|
213
|
+
[MQTT::Client]: http://rubydoc.info/gems/mqtt-ccutrer/MQTT/Client#instance_attr_details
|
214
|
+
[MQTT::Client.connect]: http://rubydoc.info/gems/mqtt-ccutrer/MQTT/Client.connect
|
215
|
+
[MQTT::Client#publish]: http://rubydoc.info/gems/mqtt-ccutrer/MQTT/Client:publish
|
216
|
+
[MQTT::Client#subscribe]: http://rubydoc.info/gems/mqtt-ccutrer/MQTT/Client:subscribe
|
217
|
+
[MQTT::Client#get]: http://rubydoc.info/gems/mqtt-ccutrer/MQTT/Client:get
|
218
|
+
|
data/lib/mqtt-ccutrer.rb
ADDED
data/lib/mqtt.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'logger'
|
4
|
+
require 'socket'
|
5
|
+
require 'timeout'
|
6
|
+
|
7
|
+
require 'mqtt/version'
|
8
|
+
|
9
|
+
module MQTT
|
10
|
+
# Default port number for unencrypted connections
|
11
|
+
DEFAULT_PORT = 1883
|
12
|
+
|
13
|
+
# Default port number for TLS/SSL encrypted connections
|
14
|
+
DEFAULT_SSL_PORT = 8883
|
15
|
+
|
16
|
+
# Super-class for other MQTT related exceptions
|
17
|
+
class Exception < RuntimeError
|
18
|
+
end
|
19
|
+
|
20
|
+
# A ProtocolException will be raised if there is a
|
21
|
+
# problem with data received from a remote host
|
22
|
+
class ProtocolException < Exception
|
23
|
+
end
|
24
|
+
|
25
|
+
class KeepAliveTimeout < ProtocolException
|
26
|
+
end
|
27
|
+
|
28
|
+
# A NotConnectedException will be raised when trying to
|
29
|
+
# perform a function but no connection has been
|
30
|
+
# established
|
31
|
+
class NotConnectedException < Exception
|
32
|
+
end
|
33
|
+
|
34
|
+
# A ConnectionClosedException will be raised when the
|
35
|
+
# connection has been closed while waiting for an operation
|
36
|
+
# to complete
|
37
|
+
class ConnectionClosedException < Exception
|
38
|
+
end
|
39
|
+
|
40
|
+
# A ResendLimitExceededException will be raised when a packet
|
41
|
+
# has timed out without an ack too many times
|
42
|
+
class ResendLimitExceededException < Exception
|
43
|
+
end
|
44
|
+
|
45
|
+
autoload :Client, 'mqtt/client'
|
46
|
+
autoload :Packet, 'mqtt/packet'
|
47
|
+
autoload :Proxy, 'mqtt/proxy'
|
48
|
+
|
49
|
+
# MQTT-SN
|
50
|
+
module SN
|
51
|
+
# Default port number for unencrypted connections
|
52
|
+
DEFAULT_PORT = 1883
|
53
|
+
|
54
|
+
# A ProtocolException will be raised if there is a
|
55
|
+
# problem with data received from a remote host
|
56
|
+
class ProtocolException < MQTT::Exception
|
57
|
+
end
|
58
|
+
|
59
|
+
autoload :Packet, 'mqtt/sn/packet'
|
60
|
+
end
|
61
|
+
end
|