module Faye::WebSocket::API

def initialize(options = {})

def initialize(options = {})
  @ready_state = CONNECTING
  super()
  ::WebSocket::Driver.validate_options(options, [
    :headers, :extensions, :max_length, :ping, :proxy, :tls, :binary_data_format
  ])
  @driver = yield
  if headers = options[:headers]
    headers.each { |name, value| @driver.set_header(name, value) }
  end
  [*options[:extensions]].each do |extension|
    @driver.add_extension(extension)
  end
  @ping            = options[:ping]
  @ping_id         = 0
  @buffered_amount = 0
  @close_params = @close_timer = @ping_timer = @proxy = @stream = nil
  @onopen = @onmessage = @onclose = @onerror = nil
  @driver.on(:open)    { |e| open }
  @driver.on(:message) { |e| receive_message(e.data) }
  @driver.on(:close)   { |e| begin_close(e.reason, e.code, :wait_for_write => true) }
  @driver.on(:error) do |error|
    emit_error(error.message)
  end
  if @ping
    @ping_timer = EventMachine.add_periodic_timer(@ping) do
      @ping_id += 1
      ping(@ping_id.to_s)
    end
  end
end