diff --git a/hosts/radiobert/sbs2json.rb b/hosts/radiobert/sbs2json.rb index d61d7c0b..57cf37df 100644 --- a/hosts/radiobert/sbs2json.rb +++ b/hosts/radiobert/sbs2json.rb @@ -5,6 +5,7 @@ require 'webrick' require 'json' TIMEOUT = 60 +last_purge = Time.now.to_i data = {} Thread.new do @@ -21,17 +22,18 @@ sock = TCPSocket.new "radiobert.serv.zentralwerk.org", 30003 while line = sock.gets begin fields = line.chomp.split(/,/) - msg_type = fields[1].to_i + msg_type = fields[1] + hex = fields[4].downcase values = { - :hex => fields[4].downcase, + :hex => hex, :last => Time.now.to_i } case msg_type - when 1 + when "1" values[:flight] = fields[10] - when 3 + when "3" unless fields[14].empty? or fields[15].empty? values[:lat] = fields[14].to_f values[:lon] = fields[15].to_f @@ -40,7 +42,7 @@ while line = sock.gets values[:altitude] = fields[11].to_i end - when 4 + when "4" unless fields[12].empty? values[:speed] = fields[12].to_i end @@ -49,16 +51,20 @@ while line = sock.gets end end - old_value = data[values[:hex]] + old_value = data[hex] if old_value old_value.merge! values else - data[values[:hex]] = values + data[hex] = values end - data.delete_if { |hex, values| - Time.now.to_i >= values[:last] + TIMEOUT - } + now = Time.now.to_i + if now >= last_purge + TIMEOUT / 10 + data.delete_if { |hex, values| + now >= values[:last] + TIMEOUT + } + last_purge = now + end rescue STDERR.puts $!