class OmfCommon::Eventloop

Providing event loop support.

Public Class Methods

init(opts, &block) click to toggle source

opts:

:type - eventloop provider
:provider - custom provider (opts)
  :require - gem to load first (opts)
  :constructor - Class implementing provider
# File lib/omf_common/eventloop.rb, line 30
def self.init(opts, &block)
  unless @@instance
    unless provider = opts[:provider]
      provider = @@providers[opts[:type].to_sym]
    end
    unless provider
      raise "Missing Eventloop provider declaration. Either define 'type' or 'provider'"
    end

    require provider[:require] if provider[:require]

    if class_name = provider[:constructor]
      provider_class = class_name.split('::').inject(Object) {|c,n| c.const_get(n) }
      inst = provider_class.new(opts, &block)
    else
      raise "Missing provider creation info - :constructor"
    end
    @@instance = inst
  end
  @@instance
end
instance() click to toggle source
# File lib/omf_common/eventloop.rb, line 52
def self.instance
  @@instance
end
new(opts = {}, &block) click to toggle source
# File lib/omf_common/eventloop.rb, line 119
def initialize(opts = {}, &block)
  #run(&block) if block
end

Public Instance Methods

after(delay_sec, &block) click to toggle source

Execute block after some time

@param [Float] delay_sec in sec

# File lib/omf_common/eventloop.rb, line 60
def after(delay_sec, &block)
  raise "Missing implementation 'after'"
end
defer(&block) click to toggle source

Call ‘block’ in the context of a separate thread.

# File lib/omf_common/eventloop.rb, line 74
def defer(&block)
  raise "Missing implementation 'defer'"
end
every(interval_sec, &block) click to toggle source

Periodically call block every interval_sec

@param [Float] interval_sec in sec

# File lib/omf_common/eventloop.rb, line 68
def every(interval_sec, &block)
  raise "Missing implementation 'every'"
end
join() click to toggle source

Block calling thread until eventloop exits

# File lib/omf_common/eventloop.rb, line 79
def join()
  raise "Missing implementation 'join'"
end
on_int_signal(&block) click to toggle source

Calling ‘block’ when having trapped an INT signal

# File lib/omf_common/eventloop.rb, line 106
def on_int_signal(&block)
  # trap(:INT)
  warn "Missing implementation 'on_int_signal'"
end
on_stop(&block) click to toggle source

Calling ‘block’ before stopping eventloop

# File lib/omf_common/eventloop.rb, line 100
def on_stop(&block)
  @@on_stop_proc << block
end
on_term_signal(&block) click to toggle source

Calling ‘block’ when having trapped a TERM signal

# File lib/omf_common/eventloop.rb, line 113
def on_term_signal(&block)
  # trap(:TERM) {}
  warn "Missing implementation 'on_term_signal'"
end
run() click to toggle source
# File lib/omf_common/eventloop.rb, line 83
def run()
  raise "Missing implementation 'run'"
end
stop() click to toggle source
# File lib/omf_common/eventloop.rb, line 87
def stop()
  @@on_stop_proc.each do |block|
    begin
      block.call()
    rescue  => ex
      error "Exception '#{ex}'"
      debug "#{ex}\n\t#{ex.backtrace.join("\n\t")}"
    end
  end
end