diff --git a/lib/faye/websocket.rb b/lib/faye/websocket.rb index 4f61213..16c1ead 100644 --- a/lib/faye/websocket.rb +++ b/lib/faye/websocket.rb @@ -19,7 +19,6 @@ module Faye autoload :Draft75Parser, root + '/draft75_parser' autoload :Draft76Parser, root + '/draft76_parser' autoload :Protocol8Parser, root + '/protocol8_parser' - autoload :Publisher, root + '/publisher' # http://www.w3.org/International/questions/qa-forms-utf-8.en.php UTF8_MATCH = /^([\x00-\x7F]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})*$/ diff --git a/lib/faye/websocket/api.rb b/lib/faye/websocket/api.rb index 3887f50..a1776e9 100644 --- a/lib/faye/websocket/api.rb +++ b/lib/faye/websocket/api.rb @@ -10,8 +10,6 @@ module Faye attr_reader :url, :ready_state, :buffered_amount attr_accessor :onopen, :onmessage, :onerror, :onclose - include Publisher - def receive(data) return false unless ready_state == OPEN event = Event.new('message') @@ -53,20 +51,29 @@ module Faye end def add_event_listener(type, listener, use_capture) - bind(type, listener) + @listeners ||= {} + list = @listeners[event_type] ||= [] + list << listener end def remove_event_listener(type, listener, use_capture) - unbind(type, listener) + return unless @listeners and @listeners[event_type] + return @listeners.delete(event_type) unless listener + + @listeners[event_type].delete_if(&listener.method(:==)) end def dispatch_event(event) event.target = event.current_target = self event.event_phase = Event::AT_TARGET - trigger(event.type, event) callback = __send__("on#{ event.type }") callback.call(event) if callback + + return unless @listeners and @listeners[event_type] + @listeners[event_type].each do |listener| + listener.call(*args) + end end end diff --git a/lib/faye/websocket/publisher.rb b/lib/faye/websocket/publisher.rb deleted file mode 100644 index 06e64e2..0000000 --- a/lib/faye/websocket/publisher.rb +++ /dev/null @@ -1,31 +0,0 @@ -class Faye::WebSocket - module Publisher - - def count_listeners(event_type) - return 0 unless @subscribers and @subscribers[event_type] - @subscribers[event_type].size - end - - def bind(event_type, &listener) - @subscribers ||= {} - list = @subscribers[event_type] ||= [] - list << listener - end - - def unbind(event_type, &listener) - return unless @subscribers and @subscribers[event_type] - return @subscribers.delete(event_type) unless listener - - @subscribers[event_type].delete_if(&listener.method(:==)) - end - - def trigger(event_type, *args) - return unless @subscribers and @subscribers[event_type] - @subscribers[event_type].each do |listener| - listener.call(*args) - end - end - - end -end -