1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
module WebSocket
class Driver
module EventEmitter
def initialize
@listeners = Hash.new { |h,k| h[k] = [] }
end
def add_listener(event, callable = nil, &block)
listener = callable || block
@listeners[event.to_s] << listener
listener
end
def on(event, callable = nil, &block)
if callable
add_listener(event, callable)
else
add_listener(event, &block)
end
end
def remove_listener(event, callable = nil, &block)
listener = callable || block
@listeners[event.to_s].delete(listener)
listener
end
def remove_all_listeners(event = nil)
if event
@listeners.delete(event.to_s)
else
@listeners.clear
end
end
def emit(event, *args)
@listeners[event.to_s].dup.each do |listener|
listener.call(*args)
end
end
def listener_count(event)
return 0 unless @listeners.has_key?(event.to_s)
@listeners[event.to_s].size
end
def listeners(event)
@listeners[event.to_s]
end
end
end
end
|