class Argus::NavStreamer
NavStreamer
State Transitions:
State Trigger Next Action —— ————– —- —————– init start wait reconnect
wait short_timeout
wait request_nav_data
wait long_timeout
wait reconnect wait received_data
run –
run short_timeout
run – run long_timeout
wait reconnect run received_data
run –
Attributes
state[R]
Public Class Methods
new(opts={})
click to toggle source
# File lib/argus/nav_streamer.rb 22 def initialize(opts={}) 23 @state = :init 24 @socket = nil 25 @remote_host = opts.fetch(:remote_host) 26 @local_host = opts[:local_host] || '0.0.0.0' 27 @port = opts[:port] || 5554 28 @socket_class = opts[:UDPSocket] || UDPSocket 29 start_timer unless opts[:disable_timer] 30 end
Public Instance Methods
long_timeout()
click to toggle source
# File lib/argus/nav_streamer.rb 43 def long_timeout 44 if @state == :wait || @state == :run 45 @state = :wait 46 reconnect 47 end 48 end
receive_data()
click to toggle source
# File lib/argus/nav_streamer.rb 50 def receive_data 51 data, from = @socket.recvfrom(1024) 52 if data.unpack("V").first == 0x55667788 53 received_data 54 NavData.new(data) 55 else 56 nil 57 end 58 end
received_data()
click to toggle source
# File lib/argus/nav_streamer.rb 60 def received_data 61 if state == :wait || state == :run 62 @state = :run 63 @long_flag = false 64 @short_flag = false 65 end 66 end
short_timeout()
click to toggle source
# File lib/argus/nav_streamer.rb 37 def short_timeout 38 if state == :wait 39 request_nav_data 40 end 41 end
start()
click to toggle source
# File lib/argus/nav_streamer.rb 32 def start 33 @state = :wait 34 reconnect 35 end
Private Instance Methods
disconnect()
click to toggle source
# File lib/argus/nav_streamer.rb 81 def disconnect 82 @socket.close 83 @socket = nil 84 end
new_socket()
click to toggle source
# File lib/argus/nav_streamer.rb 86 def new_socket 87 @socket_class.new 88 end
reconnect()
click to toggle source
# File lib/argus/nav_streamer.rb 74 def reconnect 75 disconnect if @socket 76 @socket = new_socket 77 @socket.bind(@local_host, @port) rescue nil 78 request_nav_data 79 end
start_timer()
click to toggle source
# File lib/argus/nav_streamer.rb 101 def start_timer 102 @n = 0 103 @thread = Thread.new do 104 loop do 105 tick 106 sleep 1.0 107 end 108 end 109 end
tick()
click to toggle source
# File lib/argus/nav_streamer.rb 90 def tick 91 short_timeout if @short_flag 92 @short_flag = true 93 if @n == 0 94 long_timeout if @long_flag 95 @long_flag = true 96 end 97 @n += 1 98 @n = 0 if @n == 10 99 end