Module: Julewire::Ractor::Bridge::BridgeThread
- Defined in:
- lib/julewire/ractor/bridge/bridge_thread.rb
Constant Summary collapse
- THREAD_NAME =
"julewire-ractor-bridge"- MONITOR_MESSAGES =
%i[aborted exited].freeze
Class Method Summary collapse
- .close_message?(message) ⇒ Boolean
- .monitor_message?(message) ⇒ Boolean
- .receive_message(port, monitor_port) ⇒ Object
- .run(port:, handler:, monitor_port: nil) ⇒ Object
- .start(port:, monitor_port: nil, &handler) ⇒ Object
- .warn_bridge_stopped(error) ⇒ Object
Class Method Details
.close_message?(message) ⇒ Boolean
37 38 39 |
# File 'lib/julewire/ractor/bridge/bridge_thread.rb', line 37 def () .is_a?(Hash) && [:command] == :close end |
.monitor_message?(message) ⇒ Boolean
41 42 43 |
# File 'lib/julewire/ractor/bridge/bridge_thread.rb', line 41 def () MONITOR_MESSAGES.include?() end |
.receive_message(port, monitor_port) ⇒ Object
45 46 47 48 49 50 |
# File 'lib/julewire/ractor/bridge/bridge_thread.rb', line 45 def (port, monitor_port) return port.receive unless monitor_port _selected_port, = ::Ractor.select(port, monitor_port) end |
.run(port:, handler:, monitor_port: nil) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/julewire/ractor/bridge/bridge_thread.rb', line 18 def run(port:, handler:, monitor_port: nil) bridge_error = nil Stats.bridge_started loop do = (port, monitor_port) Stats. break if () || () handler.call() rescue StandardError => e bridge_error = e warn_bridge_stopped(e) Julewire::Ractor::PortLifecycle.close(port) break end ensure Stats.bridge_stopped(bridge_error) end |
.start(port:, monitor_port: nil, &handler) ⇒ Object
11 12 13 14 15 16 |
# File 'lib/julewire/ractor/bridge/bridge_thread.rb', line 11 def start(port:, monitor_port: nil, &handler) Thread.new { run(port: port, monitor_port: monitor_port, handler: handler) }.tap do |thread| thread.name = THREAD_NAME thread.report_on_exception = true end end |
.warn_bridge_stopped(error) ⇒ Object
52 53 54 55 56 |
# File 'lib/julewire/ractor/bridge/bridge_thread.rb', line 52 def warn_bridge_stopped(error) Warning.warn("julewire ractor bridge stopped: #{error.class}\n") rescue StandardError nil end |