class Faye::WebSocket
def self.determine_url(env)
def self.determine_url(env) secure = Rack::Request.new(env).ssl? scheme = secure ? 'wss:' : 'ws:' "#{ scheme }//#{ env['HTTP_HOST'] }#{ env['REQUEST_URI'] }" end
def self.ensure_reactor_running
def self.ensure_reactor_running Thread.new { EventMachine.run } unless EventMachine.reactor_running? Thread.pass until EventMachine.reactor_running? end
def self.load_adapter(backend)
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
def self.websocket?(env)
def self.websocket?(env) ::WebSocket::Driver.websocket?(env) end
def initialize(env, protocols = nil, options = {})
def initialize(env, protocols = nil, options = {}) WebSocket.ensure_reactor_running @env = env @url = WebSocket.determine_url(@env) @driver = ::WebSocket::Driver.rack(self, :protocols => protocols) @stream = Stream.new(self) @ping = options[:ping] @ping_id = 0 if callback = @env['async.callback'] callback.call([101, {}, @stream]) end super() @driver.start end
def rack_response
def rack_response [ -1, {}, [] ] end
def write(data)
def write(data) @stream.write(data) end