Class: ChatSDK::Dispatcher

Inherits:
Object
  • Object
show all
Defined in:
lib/chat_sdk/dispatcher.rb

Instance Method Summary collapse

Constructor Details

#initialize(chat:, config:, state:, registry:) ⇒ Dispatcher

Returns a new instance of Dispatcher.



5
6
7
8
9
10
# File 'lib/chat_sdk/dispatcher.rb', line 5

def initialize(chat:, config:, state:, registry:)
  @chat = chat
  @config = config
  @state = state
  @registry = registry
end

Instance Method Details

#dispatch(event, adapter:, adapter_name:) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/chat_sdk/dispatcher.rb', line 12

def dispatch(event, adapter:, adapter_name:)
  ChatSDK::Instrumentation.instrument("dispatch.chat_sdk", adapter: adapter_name, event_type: event.type) do
    return unless dedupe(event, adapter_name)

    thread = build_thread(event, adapter)
    thread_key = thread_key_for(event, adapter_name)

    return unless acquire_lock(thread_key, event)

    begin
      handlers = @registry.handlers_for(event)
      handlers.each { |handler| execute_handler(handler, event, thread) }
    ensure
      release_lock(thread_key)
    end
  end
end