class Svent::EventManger
Attributes
events[R]
Public Class Methods
new()
click to toggle source
# File lib/svent/event_manger.rb, line 93 def initialize @events = {} @event_callback_fibers = [] @next_callback_fibers = [] Helper.init(@events, @event_callback_fibers) end
Public Instance Methods
debug_arr()
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# File lib/svent/event_manger.rb, line 175 def have(name) @events.each { |event| return true if event.name == name } false end
logger(*arg)
click to toggle source
# 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)
click to toggle source
# 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()
click to toggle source
# File lib/svent/event_manger.rb, line 100 def stop trigger(:event_manger_stop) trigger(:event_manger_stop?) end
stop?()
click to toggle source
# File lib/svent/event_manger.rb, line 105 def stop? @next_callback_fibers == [] && @event_callback_fibers == [] end
trigger(name, info = nil)
click to toggle source
# 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()
click to toggle source
# 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