Class: OmfCommon::Eventloop
- Inherits:
-
Object
- Object
- OmfCommon::Eventloop
- Defined in:
- lib/omf_common/eventloop.rb,
lib/omf_common/eventloop/em.rb,
lib/omf_common/eventloop/local_evl.rb
Overview
Providing event loop support.
Direct Known Subclasses
Defined Under Namespace
Classes: EventMachine, Local
Constant Summary collapse
- @@providers =
{ em: { require: 'omf_common/eventloop/em', constructor: 'OmfCommon::Eventloop::EventMachine' }, local: { require: 'omf_common/eventloop/local_evl', constructor: 'OmfCommon::Eventloop::Local' } }
- @@instance =
nil
- @@on_stop_proc =
[]
Class Method Summary collapse
-
.init(opts, &block) ⇒ Object
opts: :type - eventloop provider :provider - custom provider (opts) :require - gem to load first (opts) :constructor - Class implementing provider.
- .instance ⇒ Object
Instance Method Summary collapse
-
#after(delay_sec, &block) ⇒ Object
Execute block after some time.
-
#defer(&block) ⇒ Object
Call ‘block’ in the context of a separate thread.
-
#every(interval_sec, &block) ⇒ Object
Periodically call block every interval_sec.
-
#join ⇒ Object
Block calling thread until eventloop exits.
-
#on_int_signal(&block) ⇒ Object
Calling ‘block’ when having trapped an INT signal.
-
#on_stop(&block) ⇒ Object
Calling ‘block’ before stopping eventloop.
-
#on_term_signal(&block) ⇒ Object
Calling ‘block’ when having trapped a TERM signal.
- #run ⇒ Object
- #stop ⇒ Object
Class Method Details
.init(opts, &block) ⇒ Object
opts:
:type - eventloop provider
:provider - custom provider (opts)
:require - gem to load first (opts)
:constructor - Class implementing provider
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# 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 ⇒ Object
52 53 54 |
# File 'lib/omf_common/eventloop.rb', line 52 def self.instance @@instance end |
Instance Method Details
#after(delay_sec, &block) ⇒ Object
Execute block after some time
60 61 62 |
# File 'lib/omf_common/eventloop.rb', line 60 def after(delay_sec, &block) raise "Missing implementation 'after'" end |
#defer(&block) ⇒ Object
Call ‘block’ in the context of a separate thread.
74 75 76 |
# File 'lib/omf_common/eventloop.rb', line 74 def defer(&block) raise "Missing implementation 'defer'" end |
#every(interval_sec, &block) ⇒ Object
Periodically call block every interval_sec
68 69 70 |
# File 'lib/omf_common/eventloop.rb', line 68 def every(interval_sec, &block) raise "Missing implementation 'every'" end |
#join ⇒ Object
Block calling thread until eventloop exits
79 80 81 |
# File 'lib/omf_common/eventloop.rb', line 79 def join() raise "Missing implementation 'join'" end |
#on_int_signal(&block) ⇒ Object
Calling ‘block’ when having trapped an INT signal
106 107 108 109 |
# 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) ⇒ Object
Calling ‘block’ before stopping eventloop
100 101 102 |
# File 'lib/omf_common/eventloop.rb', line 100 def on_stop(&block) @@on_stop_proc << block end |
#on_term_signal(&block) ⇒ Object
Calling ‘block’ when having trapped a TERM signal
113 114 115 116 |
# File 'lib/omf_common/eventloop.rb', line 113 def on_term_signal(&block) # trap(:TERM) {} warn "Missing implementation 'on_term_signal'" end |
#run ⇒ Object
83 84 85 |
# File 'lib/omf_common/eventloop.rb', line 83 def run() raise "Missing implementation 'run'" end |