Class: Svent::EventManger
- Inherits:
-
Object
- Object
- Svent::EventManger
- Defined in:
- lib/svent/event_manger.rb
Defined Under Namespace
Modules: Helper
Instance Attribute Summary collapse
-
#events ⇒ Object
readonly
Returns the value of attribute events.
Instance Method Summary collapse
- #debug_arr ⇒ Object
- #event(name, info) ⇒ Object
- #event_info(name, key, value) ⇒ Object
- #have(name) ⇒ Object
-
#initialize ⇒ EventManger
constructor
A new instance of EventManger.
- #logger(*arg) ⇒ Object
- #on(name, info = nil, index = nil, &callback) ⇒ Object
- #stop ⇒ Object
- #stop? ⇒ Boolean
- #trigger(name, info = nil) ⇒ Object
- #update ⇒ Object
Constructor Details
#initialize ⇒ EventManger
Returns a new instance of EventManger.
93 94 95 96 97 98 |
# File 'lib/svent/event_manger.rb', line 93 def initialize @events = {} @event_callback_fibers = [] @next_callback_fibers = [] Helper.init(@events, @event_callback_fibers) end |
Instance Attribute Details
#events ⇒ Object (readonly)
Returns the value of attribute events.
91 92 93 |
# File 'lib/svent/event_manger.rb', line 91 def events @events end |
Instance Method Details
#debug_arr ⇒ Object
110 111 112 113 114 115 116 |
# File 'lib/svent/event_manger.rb', line 110 def debug_arr arr = [] next_arr = [] @event_callback_fibers.each{|o| arr.push [o.name, o.object_id] } @next_callback_fibers.each{|o| next_arr.push [o.name, o.object_id] } {callback: arr, next: next_arr} end |
#event(name, info) ⇒ Object
166 167 168 |
# File 'lib/svent/event_manger.rb', line 166 def event(name, info) @events[name] ? @events[name].info = info : Event.new(name, info) end |
#event_info(name, key, value) ⇒ Object
170 171 172 173 |
# File 'lib/svent/event_manger.rb', line 170 def event_info(name, key, value) event = @events[name] ||= Event.new(name, info) event.info[key] = value end |
#have(name) ⇒ Object
175 176 177 178 |
# File 'lib/svent/event_manger.rb', line 175 def have(name) @events.each { |event| return true if event.name == name } false end |
#logger(*arg) ⇒ Object
118 119 120 121 122 |
# File 'lib/svent/event_manger.rb', line 118 def logger(*arg) str = '' arg.each{ |s| str += "#{s}, " } $log.write "#{str[0, str.size - 2]}\n" end |
#on(name, info = nil, index = nil, &callback) ⇒ Object
156 157 158 159 160 161 162 163 164 |
# File 'lib/svent/event_manger.rb', line 156 def on(name, info = nil, index = nil, &callback) name = name.to_sym if name.class == String if name == :event_manger_stop? raise 'error:The event(:event_manger_stop?) can only have one callback.' if @events.include?(:event_manger_stop?) end event = @events[name] ||= Event.new(name, info) index = event.length unless index event[index] = callback end |
#stop ⇒ Object
100 101 102 103 |
# File 'lib/svent/event_manger.rb', line 100 def stop trigger(:event_manger_stop) trigger(:event_manger_stop?) end |
#stop? ⇒ Boolean
105 106 107 |
# File 'lib/svent/event_manger.rb', line 105 def stop? @next_callback_fibers == [] && @event_callback_fibers == [] end |
#trigger(name, info = nil) ⇒ Object
144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/svent/event_manger.rb', line 144 def trigger(name, info = nil) if info def info.method_missing(sym) self[sym] if self.key?(sym) end end name = name.to_sym if name.class == String event = @events[name] event.each{ |callback| @event_callback_fibers.push(EventCallbackFiber.new(Helper, name, callback, info)) } if event logger 'trigger:', name, debug_arr, @event_callback_fibers.size if Svent::DEBUG end |
#update ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/svent/event_manger.rb', line 125 def update logger '='*4+'update' if Svent::DEBUG if @event_callback_fibers != [] @next_callback_fibers = [] loop do obj = @event_callback_fibers.pop break unless obj logger "==fiber-#{obj.name}(#{obj.object_id}) call:" if Svent::DEBUG logger'before:', debug_arr, @event_callback_fibers.size if Svent::DEBUG Helper.this = obj obj.resume Helper.this = nil logger'after:', debug_arr, @event_callback_fibers.size if Svent::DEBUG @next_callback_fibers.push obj if obj.alive? end @event_callback_fibers = @next_callback_fibers end end |