Module: Takagi::Base::ReactorManagement

Included in:
Takagi::Base, Controller
Defined in:
lib/takagi/base/reactor_management.rb,
sig/takagi/base/reactor_management.rbs

Overview

Manages reactor registration and lifecycle for observable/observer patterns.

Extracted from Base class to follow Single Responsibility Principle. Handles reactor DSL blocks and reactor class registration.

Instance Method Summary collapse

Instance Method Details

#reactor(threads: 2, name: nil, interval: 1.0) {|arg0| ... } ⇒ Object

Defines a reactor using a DSL block

The block is evaluated in the context of a new Reactor instance, allowing you to define observables and observers inline.

Examples:

reactor do
  observable '/temperature' do
    { value: current_temp, unit: 'C' }
  end

  observer 'coap://other-node:5683/alerts' do |notification|
    handle_alert(notification)
  end
end

Yields:

  • Block defining reactor configuration

Yield Parameters:

  • arg0

Yield Returns:

  • (Object)

Returns:

  • (Object)


40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/takagi/base/reactor_management.rb', line 40

def reactor(threads: 2, name: nil, interval: 1.0, &block)
  reactor_name = name || "#{self.name.split('::').last.downcase}-reactor"
  reactor_instance = Takagi::Observable::Reactor.new(
    threads: threads,
    name: reactor_name,
    interval: interval
  )
  reactor_instance.instance_eval(&block)

  # Register with Observable::Registry
  Takagi::Observable::Registry.register(reactor_name.to_sym, reactor_instance)

  reactor_instance
end

#start_reactorsObject

Starts all registered reactors

Called automatically by server lifecycle management during boot. Can be called manually if needed.

Returns:

  • (Object)


92
93
94
# File 'lib/takagi/base/reactor_management.rb', line 92

def start_reactors
  Takagi::Observable::Registry.start_all
end

#stop_reactorsvoid

This method returns an undefined value.

Stops all registered reactors



99
100
101
# File 'lib/takagi/base/reactor_management.rb', line 99

def stop_reactors
  Takagi::Observable::Registry.stop_all
end

#use_reactor(name, klass_or_instance) ⇒ Object

Registers a reactor class instance

Useful when you have a custom reactor class that you want to instantiate and register with the reactor registry.

Examples:

class CustomReactor < Takagi::Reactor
  def initialize
    super
    # custom setup
  end
end

use_reactor CustomReactor

Parameters:

  • klass (Class)

    Reactor class to instantiate

Returns:

  • (Object)


75
76
77
78
79
80
81
82
83
84
# File 'lib/takagi/base/reactor_management.rb', line 75

def use_reactor(name, klass_or_instance)
  reactor_instance = if klass_or_instance.is_a?(Class)
                       klass_or_instance.new
                     else
                       klass_or_instance
                     end

  Takagi::Observable::Registry.register(name.to_sym, reactor_instance)
  reactor_instance
end