Class: Wamp::Manager::Event::Call

Inherits:
Base
  • Object
show all
Defined in:
lib/wamp/manager/event/call.rb

Overview

Call Message Event

Instance Attribute Summary

Attributes inherited from Base

#session

Instance Method Summary collapse

Methods inherited from Base

#emit_event_name, #error?, #initialize, #listen_event_name, #transmit

Constructor Details

This class inherits a constructor from Wamp::Manager::Event::Base

Instance Method Details

#add_event_listener(&block) ⇒ Object

rubocop:disable Metrics/MethodLength, Metrics/AbcSize



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/wamp/manager/event/call.rb', line 10

def add_event_listener(&block) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
  on_progress = options.delete(:on_progress)
  options.merge!(receive_progress: true) if on_progress

  session.on(listen_event_name) do |result, error|
    if error
      block&.call(nil, error)
    elsif result && result.details["progress"]
      on_progress.call(result)
    else
      session.off(listen_event_name)
      block&.call(result, nil)
    end
  end
  session.transmit(payload)
end

#emit_event(message) ⇒ Object



27
28
29
30
31
32
33
34
35
36
# File 'lib/wamp/manager/event/call.rb', line 27

def emit_event(message)
  manager = Wamp::Router::Registrations.invoke(message, session)
  return manager.transmit if manager.error?

  # Invocation Manager Receives Yield Message
  manager.add_event_listener do |yield_msg|
    result = Message::Result.new(message.request_id, {}, *yield_msg.args, **yield_msg.kwargs)
    session.transmit(result.payload)
  end
end