HEX
Server: Apache
System: Linux s198.coreserver.jp 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC 2025 x86_64
User: nagasaki (10062)
PHP: 7.1.33
Disabled: NONE
Upload Files
File: //usr/local/rvm/gems/default/gems/websocket-driver-0.7.5/lib/websocket/driver/event_emitter.rb
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