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 51 |
# File 'lib/omf_common/eventloop.rb', line 30 def self.init(opts, &block) if @@instance raise "Eventloop provider already iniitalised" end 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 inst end |
.instance ⇒ Object
53 54 55 |
# File 'lib/omf_common/eventloop.rb', line 53 def self.instance @@instance end |
Instance Method Details
#after(delay_sec, &block) ⇒ Object
Execute block after some time
61 62 63 |
# File 'lib/omf_common/eventloop.rb', line 61 def after(delay_sec, &block) raise "Missing implementation 'after'" end |
#defer(&block) ⇒ Object
Call ‘block’ in the context of a separate thread.
75 76 77 |
# File 'lib/omf_common/eventloop.rb', line 75 def defer(&block) raise "Missing implementation 'defer'" end |
#every(interval_sec, &block) ⇒ Object
Periodically call block every interval_sec
69 70 71 |
# File 'lib/omf_common/eventloop.rb', line 69 def every(interval_sec, &block) raise "Missing implementation 'every'" end |
#join ⇒ Object
Block calling thread until eventloop exits
80 81 82 |
# File 'lib/omf_common/eventloop.rb', line 80 def join() raise "Missing implementation 'join'" end |
#on_int_signal(&block) ⇒ Object
Calling ‘block’ when having trapped an INT signal
107 108 109 110 |
# File 'lib/omf_common/eventloop.rb', line 107 def on_int_signal(&block) # trap(:INT) warn "Missing implementation 'on_int_signal'" end |
#on_stop(&block) ⇒ Object
Calling ‘block’ before stopping eventloop
101 102 103 |
# File 'lib/omf_common/eventloop.rb', line 101 def on_stop(&block) @@on_stop_proc << block end |
#on_term_signal(&block) ⇒ Object
Calling ‘block’ when having trapped a TERM signal
114 115 116 117 |
# File 'lib/omf_common/eventloop.rb', line 114 def on_term_signal(&block) # trap(:TERM) {} warn "Missing implementation 'on_term_signal'" end |
#run ⇒ Object
84 85 86 |
# File 'lib/omf_common/eventloop.rb', line 84 def run() raise "Missing implementation 'run'" end |