Method: OpenC3::InterfaceThread#start
- Defined in:
- lib/openc3/tools/cmd_tlm_server/interface_thread.rb
#start ⇒ Object
Create and start the Ruby thread that will encapsulate the interface. Creates a while loop that waits for OpenC3::Interface#connect to succeed. Then calls OpenC3::Interface#read and handles all the incoming packets.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/openc3/tools/cmd_tlm_server/interface_thread.rb', line 65 def start @thread_sleeper = Sleeper.new @thread = Thread.new do @cancel_thread = false begin if @interface.read_allowed? Logger.info "Starting packet reading for #{@interface.name}" else Logger.info "Starting connection maintenance for #{@interface.name}" end while true break if @cancel_thread unless @interface.connected? begin @mutex.synchronize do # We need to make sure connect is not called after stop() has been called connect() unless @cancel_thread end break if @cancel_thread rescue Exception => connect_error handle_connection_failed(connect_error) if @cancel_thread break else next end end end if @interface.read_allowed? begin packet = @interface.read unless packet Logger.info "Clean disconnect from #{@interface.name} (returned nil)" handle_connection_lost(nil) if @cancel_thread break else next end end packet.received_time = Time.now.sys unless packet.received_time rescue Exception => err handle_connection_lost(err) if @cancel_thread break else next end end handle_packet(packet) else @thread_sleeper.sleep(1) handle_connection_lost(nil) if !@interface.connected? end end # loop rescue Exception => error if @fatal_exception_callback @fatal_exception_callback.call(error) else Logger.error "Packet reading thread unexpectedly died for #{@interface.name}" OpenC3.handle_fatal_exception(error) end end Logger.info "Stopped packet reading for #{@interface.name}" end # Thread.new end |