Class: Legion::Gaia::ChannelRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/gaia/channel_registry.rb

Instance Method Summary collapse

Constructor Details

#initializeChannelRegistry

Returns a new instance of ChannelRegistry.



6
7
8
9
10
# File 'lib/legion/gaia/channel_registry.rb', line 6

def initialize
  @adapters = {}
  @deliver_signature_cache = {}
  @mutex = Mutex.new
end

Instance Method Details

#active_adaptersObject



35
36
37
# File 'lib/legion/gaia/channel_registry.rb', line 35

def active_adapters
  @mutex.synchronize { @adapters.values.select(&:started?) }
end

#active_channelsObject



31
32
33
# File 'lib/legion/gaia/channel_registry.rb', line 31

def active_channels
  @mutex.synchronize { @adapters.keys }
end

#adapter_for(channel_id) ⇒ Object



27
28
29
# File 'lib/legion/gaia/channel_registry.rb', line 27

def adapter_for(channel_id)
  @mutex.synchronize { @adapters[channel_id] }
end

#deliver(output_frame) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/legion/gaia/channel_registry.rb', line 43

def deliver(output_frame)
  adapter = adapter_for(output_frame.channel_id)
  return { delivered: false, reason: :no_adapter, channel_id: output_frame.channel_id } unless adapter
  unless adapter.started?
    return { delivered: false, reason: :adapter_stopped, channel_id: output_frame.channel_id }
  end

  rendered = adapter.translate_outbound(output_frame)
  normalize_delivery_result(deliver_to_adapter(adapter, rendered, output_frame),
                            channel_id: output_frame.channel_id)
end

#register(adapter) ⇒ Object



12
13
14
15
16
17
# File 'lib/legion/gaia/channel_registry.rb', line 12

def register(adapter)
  @mutex.synchronize do
    @adapters[adapter.channel_id] = adapter
    @deliver_signature_cache.delete(adapter.class)
  end
end

#sizeObject



39
40
41
# File 'lib/legion/gaia/channel_registry.rb', line 39

def size
  @mutex.synchronize { @adapters.size }
end

#start_allObject



55
56
57
# File 'lib/legion/gaia/channel_registry.rb', line 55

def start_all
  @mutex.synchronize { @adapters.each_value(&:start) }
end

#stop_allObject



59
60
61
# File 'lib/legion/gaia/channel_registry.rb', line 59

def stop_all
  @mutex.synchronize { @adapters.each_value(&:stop) }
end

#unregister(channel_id) ⇒ Object



19
20
21
22
23
24
25
# File 'lib/legion/gaia/channel_registry.rb', line 19

def unregister(channel_id)
  @mutex.synchronize do
    adapter = @adapters.delete(channel_id)
    adapter&.stop
    adapter
  end
end