Module: Wamp::Worker

Defined in:
lib/wamp/worker.rb,
lib/wamp/worker/queue.rb,
lib/wamp/worker/rails.rb,
lib/wamp/worker/config.rb,
lib/wamp/worker/runner.rb,
lib/wamp/worker/ticker.rb,
lib/wamp/worker/handler.rb,
lib/wamp/worker/version.rb,
lib/wamp/worker/proxy/base.rb,
lib/wamp/worker/proxy/requestor.rb,
lib/wamp/worker/proxy/dispatcher.rb,
lib/wamp/worker/proxy/backgrounder.rb

Defined Under Namespace

Modules: BackgroundHandler, BaseHandler, Handler, Proxy, Rails, Runner Classes: Config, ConfigProxy, Handle, Queue, Registration, Session, Subscription, Ticker

Constant Summary collapse

DEFAULT =
:default
VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.configObject

Returns the config object



29
30
31
32
33
34
# File 'lib/wamp/worker.rb', line 29

def self.config
  unless defined?(@config)
    @config = Config.new
  end
  @config
end

.configure(name = nil, &callback) ⇒ Object

Method to configure the worker

Parameters:

  • name (Symbol) (defaults to: nil)
    • The name of the connection



71
72
73
# File 'lib/wamp/worker.rb', line 71

def self.configure(name=nil, &callback)
  ConfigProxy.new(self.config, name).configure(&callback)
end

.log_level=(log_level) ⇒ Object

Sets the log level

Parameters:

  • log_level (Symbol)
    • the desired log level



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/wamp/worker.rb', line 50

def self.log_level=(log_level)
  Wamp::Client.log_level = log_level
  level =
      case log_level
      when :error
        Logger::ERROR
      when :debug
        Logger::DEBUG
      when :fatal
        Logger::FATAL
      when :warn
        Logger::WARN
      else
        Logger::INFO
      end
  self.logger.level = level
end

.loggerObject

Returns the logger object



38
39
40
41
42
43
44
45
# File 'lib/wamp/worker.rb', line 38

def self.logger
  unless defined?(@logger)
    $stdout.sync = true unless ENV['RAILS_ENV'] == "production"
    @logger = Logger.new $stdout
    @logger.level = Logger::INFO
  end
  @logger
end

.register_procedures(name, proxy, session) ⇒ Object

Registers procedures

Parameters:

  • name (Symbol)
    • The name of the connection

  • proxy (Wamp::Worker::Proxy)
    • The proxy that will be used by the handler

  • session (Wamp::Client::Session)
    • The session



104
105
106
107
108
109
110
111
112
113
# File 'lib/wamp/worker.rb', line 104

def self.register_procedures(name, proxy, session)
  Wamp::Worker.config.registrations(name).each do |r|
    handler = -> a,k,d  {
      self.logger.debug("#{self.name} invoking handler '#{r.klass}##{r.method}' for procedure '#{r.procedure}'")
      r.klass.create(proxy, :procedure, a, k, d).invoke(r.method)
    }
    session.register(r.procedure, handler, r.options)
    self.logger.info("#{self.name} register '#{r.klass}##{r.method}' for procedure '#{r.procedure}'")
  end
end

.requestor(name) ⇒ Wamp::Worker::Proxy::Requestor

Returns a requestor for objects to perform calls to the worker

Parameters:

  • name (Symbol)
    • The name of the connection

Returns:



92
93
94
95
96
97
# File 'lib/wamp/worker.rb', line 92

def self.requestor(name)
  name ||= DEFAULT

  # Create a requestor proxy for the connection
  Proxy::Requestor.new(name)
end

.run(name, **args) ⇒ Object

Method to start a worker

Parameters:

  • name (Symbol)
    • The name of the connection



78
79
80
81
82
83
84
85
86
# File 'lib/wamp/worker.rb', line 78

def self.run(name, **args)
  name ||= DEFAULT

  # Get the connection info
  options = Wamp::Worker.config.connection(name).merge(args)

  # Create the runner and start it
  Runner::Main.new(name, **options).start
end

.subscribe_topics(name, proxy, session) ⇒ Object

Subscribe to topics

Parameters:

  • name (Symbol)
    • The name of the connection

  • proxy (Wamp::Worker::Proxy)
    • The proxy that will be used by the handler

  • session (Wamp::Client::Session)
    • The session



120
121
122
123
124
125
126
127
128
129
# File 'lib/wamp/worker.rb', line 120

def self.subscribe_topics(name, proxy, session)
  Wamp::Worker.config.subscriptions(name).each do |s|
    handler = -> a, k, d {
      self.logger.debug("#{self.name} invoking handler '#{s.klass}##{s.method}' for subscription '#{s.topic}'")
      s.klass.create(proxy, :subscription, a, k, d).invoke(s.method)
    }
    session.subscribe(s.topic, handler, s.options)
    self.logger.info("#{self.name} subscribe '#{s.klass}##{s.method}' for topic '#{s.topic}'")
  end
end