mqtt-sn-ruby 0.0.12 → 0.0.13
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 +4 -4
- data/lib/mqtt-sn-ruby.rb +27 -18
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 705eb97fc06ebe058eb3b7aded29ab274e50d5d5
|
4
|
+
data.tar.gz: 38ae9662ffc544634d14130e4d776a2eaf7daf52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2874cc9d625439ce68d33414aa9efccad6d67b15775f578e035e320df388fbbabaa1b61e83d670b67ec673d49c123e28d79a1b331358d8cc09913310c036dd9
|
7
|
+
data.tar.gz: b4b54ab175b0fc6856d99dfde89ddbca500cee574cb7344043c216f67f74a11e18a86f39a1484a87cbe61dcb8721af68bf1d976a985f008a7406ff80564fdf39
|
data/lib/mqtt-sn-ruby.rb
CHANGED
@@ -6,6 +6,7 @@ require 'socket'
|
|
6
6
|
require 'json'
|
7
7
|
require 'uri'
|
8
8
|
require 'ipaddr'
|
9
|
+
require 'time'
|
9
10
|
|
10
11
|
|
11
12
|
class MqttSN
|
@@ -54,7 +55,7 @@ class MqttSN
|
|
54
55
|
|
55
56
|
def logger str,*args
|
56
57
|
if @verbose or @debug
|
57
|
-
@log_q << sprintf(str,*args)
|
58
|
+
@log_q << Time.now.iso8601+" "+sprintf(str,*args)
|
58
59
|
end
|
59
60
|
end
|
60
61
|
|
@@ -140,6 +141,7 @@ class MqttSN
|
|
140
141
|
@clients={}
|
141
142
|
@gateways={}
|
142
143
|
@autodiscovery=false
|
144
|
+
@broadcast_uri="udp://225.4.5.6:5000"
|
143
145
|
if @server_uri
|
144
146
|
puts "adding default gateway #{@server_uri}"
|
145
147
|
@gateways[0]={stamp: Time.now.to_i,uri: @server_uri, duration: 0, source: 'default', status: :ok}
|
@@ -209,7 +211,8 @@ class MqttSN
|
|
209
211
|
r,client_ip,client_port=pac
|
210
212
|
key="#{client_ip}:#{client_port}"
|
211
213
|
if not @clients[key]
|
212
|
-
|
214
|
+
uri="udp://#{client_ip}:#{client_port}"
|
215
|
+
@clients[key]={ip:client_ip, port:client_port, socket: UDPSocket.new, uri: uri, state: :active }
|
213
216
|
c=@clients[key]
|
214
217
|
puts "thread start for #{key}"
|
215
218
|
@clients[key][:thread]=Thread.new(key) do |my_key|
|
@@ -220,7 +223,7 @@ class MqttSN
|
|
220
223
|
mm=MqttSN::parse_message rr
|
221
224
|
_,port,_,_ = @clients[my_key][:socket].addr
|
222
225
|
dest="#{@server}:#{port}"
|
223
|
-
logger "
|
226
|
+
logger "so %-24.24s <- %-24.24s | %s",@clients[my_key][:uri],@gateways[@active_gw_id][:uri],mm.to_json
|
224
227
|
case mm[:type]
|
225
228
|
when :disconnect
|
226
229
|
@clients[my_key][:state]=:disconnected
|
@@ -236,7 +239,7 @@ class MqttSN
|
|
236
239
|
sbytes=@clients[key][:socket].send(r, 0, @server, @port) # to rsmb -- ok as is
|
237
240
|
_,port,_,_ = @clients[key][:socket].addr
|
238
241
|
dest="#{@server}:#{port}"
|
239
|
-
logger "
|
242
|
+
logger "ci %-24.24s -> %-24.24s | %s", @clients[key][:uri],@gateways[@active_gw_id][:uri],m.to_json
|
240
243
|
|
241
244
|
end
|
242
245
|
end
|
@@ -395,7 +398,7 @@ class MqttSN
|
|
395
398
|
m={}
|
396
399
|
if not hash[:expect]
|
397
400
|
if type==:searchgw
|
398
|
-
raw=
|
401
|
+
raw=send_packet_bcast p
|
399
402
|
else
|
400
403
|
raw=send_packet_gw p
|
401
404
|
end
|
@@ -411,7 +414,7 @@ class MqttSN
|
|
411
414
|
@iq.clear
|
412
415
|
end
|
413
416
|
if type==:searchgw
|
414
|
-
raw=
|
417
|
+
raw=send_packet_bcast p
|
415
418
|
else
|
416
419
|
raw=send_packet_gw p
|
417
420
|
end
|
@@ -466,7 +469,16 @@ class MqttSN
|
|
466
469
|
dest="#{server}:#{port}"
|
467
470
|
_,port,_,_ = socket.addr
|
468
471
|
src=":#{port}"
|
469
|
-
logger "
|
472
|
+
logger "od %-18.18s <- %-18.18s | %s",dest,src,MqttSN::parse_message(msg).to_json
|
473
|
+
end
|
474
|
+
|
475
|
+
def send_packet_bcast m
|
476
|
+
socket,server,port=[@bcast_s,MULTICAST_ADDR,@bcast_port]
|
477
|
+
msg=MqttSN::build_packet m
|
478
|
+
MqttSN::send_raw_packet msg,socket,server,port
|
479
|
+
_,port,_,_ = socket.addr
|
480
|
+
src="udp://0.0.0.0:#{port}"
|
481
|
+
logger "ob %-24.24s <- %-24.24s | %s",@broadcast_uri,src,MqttSN::parse_message(msg).to_json
|
470
482
|
end
|
471
483
|
|
472
484
|
def send_packet_gw m
|
@@ -484,7 +496,7 @@ class MqttSN
|
|
484
496
|
MqttSN::send_raw_packet msg,@gateways[@active_gw_id][:socket],uri.host,uri.port
|
485
497
|
_,port,_,_ = @gateways[@active_gw_id][:socket].addr
|
486
498
|
src="udp://0.0.0.0:#{port}"
|
487
|
-
logger "
|
499
|
+
logger "od %-24.24s <- %-24.24s | %s",@gateways[@active_gw_id][:uri],src,MqttSN::parse_message(msg).to_json
|
488
500
|
else
|
489
501
|
puts "no gw to send.."
|
490
502
|
sleep 1
|
@@ -792,7 +804,7 @@ class MqttSN
|
|
792
804
|
dest="#{client_ip}:#{client_port}"
|
793
805
|
_,port,_,_= @gateways[@active_gw_id][:socket].addr
|
794
806
|
src="udp://0.0.0.0:#{port}"
|
795
|
-
logger "
|
807
|
+
logger "id %-24.24s -> %-24.24s | %s",@gateways[@active_gw_id][:uri],src,m.to_json
|
796
808
|
process_message m
|
797
809
|
else
|
798
810
|
sleep 0.01
|
@@ -807,12 +819,10 @@ class MqttSN
|
|
807
819
|
def process_broadcast_message m,client_ip,client_port
|
808
820
|
case m[:type]
|
809
821
|
when :searchgw
|
810
|
-
key="#{client_ip}:#{client_port}"
|
811
|
-
dest="#{MULTICAST_ADDR};#{@bcast_port}"
|
812
|
-
#actually -- send data on all gateways we know...
|
813
822
|
if @forwarder
|
814
|
-
|
815
|
-
|
823
|
+
_,port,_,_=@bcast.addr
|
824
|
+
#logger "ib %-24.24s -> %-24.24s | %s","udp://0.0.0.0:#{port}",@broadcast_uri,m.to_json
|
825
|
+
send_packet_bcast [GWINFO_TYPE,@options[:gw_id]]
|
816
826
|
end
|
817
827
|
when :advertise,:gwinfo
|
818
828
|
gw_id=m[:gw_id]
|
@@ -860,7 +870,7 @@ class MqttSN
|
|
860
870
|
if @forwarder
|
861
871
|
Thread.new do
|
862
872
|
while true do
|
863
|
-
|
873
|
+
send_packet_bcast [ADVERTISE_TYPE,@options[:gw_id],@bcast_period>>8,@bcast_period&0xff]
|
864
874
|
sleep @bcast_period
|
865
875
|
end
|
866
876
|
end
|
@@ -895,10 +905,9 @@ class MqttSN
|
|
895
905
|
if @debug and m
|
896
906
|
m[:debug]=MqttSN::hexdump r
|
897
907
|
end
|
898
|
-
dest="#{client_ip}:#{client_port}"
|
899
908
|
_,port,_,_ = @bcast.addr
|
900
|
-
src=
|
901
|
-
logger "
|
909
|
+
src="udp://#{client_ip}:#{client_port}"
|
910
|
+
logger "ib %-24.24s <- %-24.24s | %s",@broadcast_uri,src,m.to_json
|
902
911
|
process_broadcast_message m,client_ip,client_port
|
903
912
|
end
|
904
913
|
rescue => e
|