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
end

Public Instance Methods

env() click to toggle source
# File lib/websocket/driver/server.rb, line 12
def env
  @http.complete? ? @http.env : nil
end
parse(buffer) click to toggle source
# File lib/websocket/driver/server.rb, line 42
def parse(buffer)
  return @delegate.parse(buffer) if @delegate

  @http.parse(buffer)
  return fail_request('Invalid HTTP request') if @http.error?
  return unless @http.complete?

  @delegate = Driver.rack(self, @options)
  @delegate.on(:open) { 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 16
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(data) click to toggle source
# File lib/websocket/driver/server.rb, line 58
def write(data)
  @socket.write(Driver.encode(data, :binary))
end

Private Instance Methods

fail_request() click to toggle source
# File lib/websocket/driver/server.rb, line 64
def fail_request
  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 69
def open
  @queue.each do |message|
    @delegate.__send__(message[0], *message[1])
  end
  @queue = []
end