class WebSocket::Driver::Server

Constants

EVENTS

Public Class Methods

new(socket, options = {}) click to toggle source
Calls superclass method WebSocket::Driver::new
# File lib/websocket/driver/server.rb, line 7
def initialize(socket, options = {})
  super
  @http = HTTP::Request.new
  @delegate = nil
end

Public Instance Methods

env() click to toggle source
# File lib/websocket/driver/server.rb, line 13
def env
  @http.complete? ? @http.env : nil
end
parse(chunk) click to toggle source
# File lib/websocket/driver/server.rb, line 43
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
url() click to toggle source
# File lib/websocket/driver/server.rb, line 17
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
write(buffer) click to toggle source
# File lib/websocket/driver/server.rb, line 60
def write(buffer)
  @socket.write(buffer)
end

Private Instance Methods

fail_request(message) click to toggle source
# File lib/websocket/driver/server.rb, line 66
def fail_request(message)
  emit(:error, ProtocolError.new(message))
  emit(:close, CloseEvent.new(Hybi::ERRORS[:protocol_error], message))
end
open() click to toggle source
# File lib/websocket/driver/server.rb, line 71
def open
  @queue.each do |method, args, block|
    @delegate.__send__(method, *args, &block)
  end
  @queue = []
end