mqtt-sub_handler 0.1.4 → 0.1.5
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 +5 -5
- data/lib/mqtt/sub_handler.rb +49 -58
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8d47218ce7ba4ae48cf8b7b44ecd807889111f520a86d5eaa5d458590d75ee5b
|
4
|
+
data.tar.gz: ba2fdf1f66a85f0de62c8c3b0238aa8ddf43df4a8e396440df92daf3323286ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44c1ab1959a9d930ff9ffa18ee5f665d0ac76ae66da132c57dc12ccba36f7228b759d1b3eb24986b40160c2376569d33129ef127433a15f5f1aec6a3af5c4e2e
|
7
|
+
data.tar.gz: 609f907b547a2a78a08a2f2cdcf1f241cc2db70f8dc17c124682aac3423375f1f55399bfc2a376582fcd93fbc2fcf7d7648768d2bd14ad3c03878e5d671326c5
|
data/lib/mqtt/sub_handler.rb
CHANGED
@@ -68,7 +68,7 @@ class SubHandler
|
|
68
68
|
tMatch = SubHandler.getTopicMatch(topic, h.topic_split);
|
69
69
|
if tMatch
|
70
70
|
begin
|
71
|
-
Timeout.timeout(
|
71
|
+
Timeout.timeout(5) {
|
72
72
|
h.offer(tMatch, data)
|
73
73
|
}
|
74
74
|
rescue Timeout::Error
|
@@ -84,19 +84,8 @@ class SubHandler
|
|
84
84
|
|
85
85
|
# Handle sending a subscription-message to the server
|
86
86
|
def raw_subscribe_to(topic, qos: 1)
|
87
|
-
|
88
|
-
|
89
|
-
if not @connected
|
90
|
-
@subscribeQueue << [topic, qos];
|
91
|
-
@conChangeMutex.unlock
|
92
|
-
else
|
93
|
-
@conChangeMutex.unlock
|
94
|
-
@mqtt.subscribe(topic => qos);
|
95
|
-
end
|
96
|
-
rescue MQTT::Exception, SocketError, SystemCallError
|
97
|
-
sleep 0.05;
|
98
|
-
retry
|
99
|
-
end
|
87
|
+
@subscribeQueue << [topic, qos];
|
88
|
+
@publisherThread.run();
|
100
89
|
end
|
101
90
|
private :raw_subscribe_to
|
102
91
|
|
@@ -220,26 +209,8 @@ class SubHandler
|
|
220
209
|
data = data.to_json
|
221
210
|
end
|
222
211
|
|
223
|
-
|
224
|
-
|
225
|
-
@conChangeMutex.lock
|
226
|
-
if not @connected
|
227
|
-
@publishQueue << {topic: topic, data: data, qos: qos, retain: retain} unless qos == 0
|
228
|
-
@conChangeMutex.unlock
|
229
|
-
else
|
230
|
-
@conChangeMutex.unlock
|
231
|
-
@mqtt.publish(topic, data, retain);
|
232
|
-
end
|
233
|
-
rescue MQTT::Exception, SocketError, SystemCallError
|
234
|
-
retryCount += 1;
|
235
|
-
if(qos == 0 && retryCount == 3)
|
236
|
-
STDERR.puts "Publish to #{topic} dropped!"
|
237
|
-
return;
|
238
|
-
end
|
239
|
-
|
240
|
-
sleep 0.05;
|
241
|
-
retry
|
242
|
-
end
|
212
|
+
@publishQueue << {topic: topic, data: data, qos: qos, retain: retain}
|
213
|
+
@publisherThread.run();
|
243
214
|
end
|
244
215
|
alias publishTo publish_to
|
245
216
|
|
@@ -265,13 +236,13 @@ class SubHandler
|
|
265
236
|
if(@mqttWasStartedClean)
|
266
237
|
print "Logging out of mqtt server... "
|
267
238
|
begin
|
268
|
-
Timeout.timeout(
|
239
|
+
Timeout.timeout(3) {
|
269
240
|
begin
|
270
241
|
@mqtt.clean_session = true;
|
271
242
|
@mqtt.disconnect();
|
272
243
|
@mqtt.connect();
|
273
244
|
rescue MQTT::Exception, SocketError, SystemCallError
|
274
|
-
sleep
|
245
|
+
sleep 0.3
|
275
246
|
retry;
|
276
247
|
end
|
277
248
|
}
|
@@ -284,35 +255,59 @@ class SubHandler
|
|
284
255
|
end
|
285
256
|
private :ensure_clean_exit
|
286
257
|
|
287
|
-
def
|
288
|
-
|
258
|
+
def mqtt_push_thread
|
259
|
+
loop do
|
260
|
+
Thread.stop();
|
261
|
+
|
262
|
+
next unless @connected
|
263
|
+
|
289
264
|
begin
|
290
|
-
Timeout.timeout(10) {
|
291
|
-
@mqtt.connect()
|
292
|
-
}
|
293
|
-
@conChangeMutex.synchronize {
|
294
|
-
@connected = true;
|
295
|
-
}
|
296
265
|
until @subscribeQueue.empty? do
|
297
266
|
h = @subscribeQueue[-1];
|
298
|
-
|
267
|
+
Timeout.timeout(3) {
|
268
|
+
@mqtt.subscribe(h[0] => h[1]);
|
269
|
+
}
|
299
270
|
@subscribeQueue.pop;
|
300
271
|
sleep 0.01
|
301
272
|
end
|
302
273
|
until @publishQueue.empty? do
|
303
274
|
h = @publishQueue[-1];
|
304
|
-
|
275
|
+
Timeout.timeout(3) {
|
276
|
+
@mqtt.publish(h[:topic], h[:data], h[:retain], h[:qos]);
|
277
|
+
}
|
305
278
|
@publishQueue.pop;
|
306
279
|
sleep 0.01
|
307
280
|
end
|
281
|
+
rescue MQTT::Exception, SocketError, SystemCallError, Timeout::Error
|
282
|
+
@conChangeMutex.synchronize {
|
283
|
+
@connected = false;
|
284
|
+
}
|
285
|
+
@mqtt.disconnect();
|
286
|
+
end
|
287
|
+
end
|
288
|
+
end
|
289
|
+
private :mqtt_push_thread
|
290
|
+
|
291
|
+
def mqtt_resub_thread
|
292
|
+
while(true)
|
293
|
+
begin
|
294
|
+
Timeout.timeout(4) {
|
295
|
+
@mqtt.connect()
|
296
|
+
}
|
297
|
+
STDERR.puts("MQTT #{@mqtt.host} connected!")
|
298
|
+
@conChangeMutex.synchronize {
|
299
|
+
@connected = true;
|
300
|
+
}
|
301
|
+
@publisherThread.run();
|
308
302
|
@mqtt.get do |topic, message|
|
309
303
|
call_interested(topic, message);
|
310
304
|
end
|
311
305
|
rescue MQTT::Exception, Timeout::Error, SocketError, SystemCallError
|
306
|
+
STDERR.puts("MQTT #{@mqtt.host} disconnected!");
|
312
307
|
@connected = false;
|
313
308
|
|
314
309
|
@conChangeMutex.unlock if @conChangeMutex.owned?
|
315
|
-
@mqtt.clean_session=false;
|
310
|
+
@mqtt.clean_session = false;
|
316
311
|
sleep 2
|
317
312
|
end
|
318
313
|
end
|
@@ -331,10 +326,7 @@ class SubHandler
|
|
331
326
|
Thread.stop();
|
332
327
|
end
|
333
328
|
def flush_pubqueue()
|
334
|
-
|
335
|
-
if @publishQueue.empty?
|
336
|
-
puts "MQTT buffer empty, continuing."
|
337
|
-
else
|
329
|
+
unless @publishQueue.empty?
|
338
330
|
print "Finishing sending of MQTT messages ... "
|
339
331
|
begin
|
340
332
|
Timeout.timeout(10) {
|
@@ -388,18 +380,17 @@ class SubHandler
|
|
388
380
|
end
|
389
381
|
@listenerThread.abort_on_exception = true;
|
390
382
|
|
383
|
+
@publisherThread = Thread.new do
|
384
|
+
mqtt_push_thread();
|
385
|
+
end
|
386
|
+
@publisherThread.abort_on_exception = true;
|
387
|
+
|
391
388
|
at_exit {
|
392
389
|
flush_pubqueue();
|
393
390
|
@listenerThread.kill();
|
391
|
+
@publisherThread.kill();
|
394
392
|
ensure_clean_exit();
|
395
393
|
}
|
396
|
-
|
397
|
-
begin
|
398
|
-
Timeout.timeout(10) {
|
399
|
-
until(@connected) do sleep 0.1; end
|
400
|
-
}
|
401
|
-
rescue Timeout::Error
|
402
|
-
end
|
403
394
|
end
|
404
395
|
end
|
405
396
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mqtt-sub_handler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Xasin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-10-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mqtt
|
@@ -114,8 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
114
|
- !ruby/object:Gem::Version
|
115
115
|
version: '0'
|
116
116
|
requirements: []
|
117
|
-
|
118
|
-
rubygems_version: 2.5.2.1
|
117
|
+
rubygems_version: 3.0.6
|
119
118
|
signing_key:
|
120
119
|
specification_version: 4
|
121
120
|
summary: Asynchronous, topic-based MQTT gem
|