class Faye::WebSocket

Constants

ADAPTERS

Attributes

env[R]

Public Class Methods

determine_url(env, schemes = ['wss', 'ws']) click to toggle source
# File lib/faye/websocket.rb, line 30
def self.determine_url(env, schemes = ['wss', 'ws'])
  scheme = schemes[secure_request?(env) ? 0 : 1]
  host   = env['HTTP_HOST']
  path   = env['PATH_INFO']
  query  = env['QUERY_STRING'].to_s

  scheme + '://' + host + path + (query.empty? ? '' : '?' + query)
end
ensure_reactor_running() click to toggle source
# File lib/faye/websocket.rb, line 39
def self.ensure_reactor_running
  Thread.new { EventMachine.run } unless EventMachine.reactor_running?
  Thread.pass until EventMachine.reactor_running?
end
load_adapter(backend) click to toggle source
# File lib/faye/websocket.rb, line 44
def self.load_adapter(backend)
  const = Kernel.const_get(ADAPTERS[backend]) rescue nil
  require(backend) unless const
  path = File.expand_path("../adapters/#{backend}.rb", __FILE__)
  require(path) if File.file?(path)
end
new(env, protocols = nil, options = {}) click to toggle source
Calls superclass method Faye::WebSocket::API.new
# File lib/faye/websocket.rb, line 68
def initialize(env, protocols = nil, options = {})
  WebSocket.ensure_reactor_running

  @env = env
  @url = WebSocket.determine_url(@env)

  super(options) { ::WebSocket::Driver.rack(self, :max_length => options[:max_length], :protocols => protocols) }
  @driver_started = false

  @stream = Stream.new(self)

  if callback = @env['async.callback']
    callback.call([101, {}, @stream])
  end
end
secure_request?(env) click to toggle source
# File lib/faye/websocket.rb, line 51
def self.secure_request?(env)
  return true if env['HTTPS'] == 'on'
  return true if env['HTTP_X_FORWARDED_SSL'] == 'on'
  return true if env['HTTP_X_FORWARDED_SCHEME'] == 'https'
  return true if env['HTTP_X_FORWARDED_PROTO'] == 'https'
  return true if env['rack.url_scheme'] == 'https'

  return false
end
websocket?(env) click to toggle source
# File lib/faye/websocket.rb, line 61
def self.websocket?(env)
  ::WebSocket::Driver.websocket?(env)
end

Public Instance Methods

rack_response() click to toggle source
# File lib/faye/websocket.rb, line 90
def rack_response
  start_driver
  [ -1, {}, [] ]
end
start_driver() click to toggle source
# File lib/faye/websocket.rb, line 84
def start_driver
  return if @driver.nil? || @driver_started
  @driver_started = true
  EventMachine.schedule { @driver.start }
end