radiobert: optimize sbs2json

This commit is contained in:
Astro 2021-10-31 00:09:34 +02:00
parent 056cedc107
commit a85dc629d5
1 changed files with 16 additions and 10 deletions

View File

@ -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 $!