class WebSocket::Driver::Server

def env

def env
  @http.complete? ? @http.env : nil
end

def fail_request(message)

def fail_request(message)
  emit(:error, ProtocolError.new(message))
  emit(:close, CloseEvent.new(Hybi::ERRORS[:protocol_error], message))
end

def initialize(socket, options = {})

def initialize(socket, options = {})
  super
  @http = HTTP::Request.new
  @delegate = nil
end

def open

def open
  @queue.each do |method, args, block|
    @delegate.__send__(method, *args, &block)
  end
  @queue = []
end

def parse(chunk)

def parse(chunk)
  return @delegate.parse(chunk) if @delegate
  @http.parse(chunk)
  return fail_request('Invalid HTTP request') if @http.error?
  return unless @http.complete?
  @delegate = Driver.rack(self, @options)
  open
  EVENTS.each do |event|
    @delegate.on(event) { |e| emit(event, e) }
  end
  emit(:connect, ConnectEvent.new)
end

def url

def url
  return nil unless e = env
  url  = "ws://#{ e['HTTP_HOST'] }"
  url << e['PATH_INFO']
  url << "?#{ e['QUERY_STRING'] }" unless e['QUERY_STRING'] == ''
  url
end

def write(buffer)

def write(buffer)
  @socket.write(buffer)
end