radiobert: optimize sbs2json
This commit is contained in:
parent
056cedc107
commit
a85dc629d5
|
@ -5,6 +5,7 @@ require 'webrick'
|
||||||
require 'json'
|
require 'json'
|
||||||
|
|
||||||
TIMEOUT = 60
|
TIMEOUT = 60
|
||||||
|
last_purge = Time.now.to_i
|
||||||
data = {}
|
data = {}
|
||||||
|
|
||||||
Thread.new do
|
Thread.new do
|
||||||
|
@ -21,17 +22,18 @@ sock = TCPSocket.new "radiobert.serv.zentralwerk.org", 30003
|
||||||
while line = sock.gets
|
while line = sock.gets
|
||||||
begin
|
begin
|
||||||
fields = line.chomp.split(/,/)
|
fields = line.chomp.split(/,/)
|
||||||
msg_type = fields[1].to_i
|
msg_type = fields[1]
|
||||||
|
hex = fields[4].downcase
|
||||||
values = {
|
values = {
|
||||||
:hex => fields[4].downcase,
|
:hex => hex,
|
||||||
:last => Time.now.to_i
|
:last => Time.now.to_i
|
||||||
}
|
}
|
||||||
|
|
||||||
case msg_type
|
case msg_type
|
||||||
when 1
|
when "1"
|
||||||
values[:flight] = fields[10]
|
values[:flight] = fields[10]
|
||||||
|
|
||||||
when 3
|
when "3"
|
||||||
unless fields[14].empty? or fields[15].empty?
|
unless fields[14].empty? or fields[15].empty?
|
||||||
values[:lat] = fields[14].to_f
|
values[:lat] = fields[14].to_f
|
||||||
values[:lon] = fields[15].to_f
|
values[:lon] = fields[15].to_f
|
||||||
|
@ -40,7 +42,7 @@ while line = sock.gets
|
||||||
values[:altitude] = fields[11].to_i
|
values[:altitude] = fields[11].to_i
|
||||||
end
|
end
|
||||||
|
|
||||||
when 4
|
when "4"
|
||||||
unless fields[12].empty?
|
unless fields[12].empty?
|
||||||
values[:speed] = fields[12].to_i
|
values[:speed] = fields[12].to_i
|
||||||
end
|
end
|
||||||
|
@ -49,16 +51,20 @@ while line = sock.gets
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
old_value = data[values[:hex]]
|
old_value = data[hex]
|
||||||
if old_value
|
if old_value
|
||||||
old_value.merge! values
|
old_value.merge! values
|
||||||
else
|
else
|
||||||
data[values[:hex]] = values
|
data[hex] = values
|
||||||
end
|
end
|
||||||
|
|
||||||
|
now = Time.now.to_i
|
||||||
|
if now >= last_purge + TIMEOUT / 10
|
||||||
data.delete_if { |hex, values|
|
data.delete_if { |hex, values|
|
||||||
Time.now.to_i >= values[:last] + TIMEOUT
|
now >= values[:last] + TIMEOUT
|
||||||
}
|
}
|
||||||
|
last_purge = now
|
||||||
|
end
|
||||||
|
|
||||||
rescue
|
rescue
|
||||||
STDERR.puts $!
|
STDERR.puts $!
|
||||||
|
|
Loading…
Reference in New Issue