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
request_nav_data() click to toggle source
   # File lib/argus/nav_streamer.rb
70 def request_nav_data
71   @socket.send("\x01\x00\x00\x00", 0, @remote_host, @port)
72 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