Class: Faye::WebSocket
- Inherits:
-
Object
- Object
- Faye::WebSocket
- Includes:
- API
- Defined in:
- lib/faye/websocket.rb,
lib/faye/websocket/api.rb,
lib/faye/websocket/client.rb,
lib/faye/adapters/rainbows.rb,
lib/faye/websocket/adapter.rb,
lib/faye/adapters/rainbows_client.rb
Defined Under Namespace
Modules: API, Adapter Classes: Client, RainbowsClient, Stream
Constant Summary collapse
- ADAPTERS =
{ 'goliath' => :Goliath, 'rainbows' => :Rainbows, 'thin' => :Thin }
Constants included from API
API::CLOSED, API::CLOSING, API::CONNECTING, API::OPEN
Instance Attribute Summary collapse
-
#env ⇒ Object
readonly
Returns the value of attribute env.
Attributes included from API
#buffered_amount, #ready_state, #url
Class Method Summary collapse
- .determine_url(env) ⇒ Object
- .ensure_reactor_running ⇒ Object
- .load_adapter(backend) ⇒ Object
- .secure_request?(env) ⇒ Boolean
- .websocket?(env) ⇒ Boolean
Instance Method Summary collapse
-
#initialize(env, protocols = nil, options = {}) ⇒ WebSocket
constructor
A new instance of WebSocket.
- #rack_response ⇒ Object
- #write(data) ⇒ Object
Methods included from API
#close, #ping, #protocol, #send
Methods included from API::EventTarget
#add_event_listener, #add_listener, #dispatch_event, #remove_event_listener
Constructor Details
#initialize(env, protocols = nil, options = {}) ⇒ WebSocket
Returns a new instance of WebSocket.
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/faye/websocket.rb', line 64 def initialize(env, protocols = nil, = {}) WebSocket.ensure_reactor_running @env = env @url = WebSocket.determine_url(@env) @driver = ::WebSocket::Driver.rack(self, :max_length => [:max_length], :protocols => protocols) @stream = Stream.new(self) if callback = @env['async.callback'] callback.call([101, {}, @stream]) end super() @driver.start end |
Instance Attribute Details
#env ⇒ Object (readonly)
Returns the value of attribute env.
61 62 63 |
# File 'lib/faye/websocket.rb', line 61 def env @env end |
Class Method Details
.determine_url(env) ⇒ Object
30 31 32 33 |
# File 'lib/faye/websocket.rb', line 30 def self.determine_url(env) scheme = secure_request?(env) ? 'wss:' : 'ws:' "#{ scheme }//#{ env['HTTP_HOST'] }#{ env['REQUEST_URI'] }" end |
.ensure_reactor_running ⇒ Object
35 36 37 38 |
# File 'lib/faye/websocket.rb', line 35 def self.ensure_reactor_running Thread.new { EventMachine.run } unless EventMachine.reactor_running? Thread.pass until EventMachine.reactor_running? end |
.load_adapter(backend) ⇒ Object
40 41 42 43 44 45 |
# File 'lib/faye/websocket.rb', line 40 def self.load_adapter(backend) const = Kernel.const_get(ADAPTERS[backend]) rescue nil require(backend) unless const path = File.("../adapters/#{backend}.rb", __FILE__) require(path) if File.file?(path) end |
.secure_request?(env) ⇒ Boolean
47 48 49 50 51 52 53 54 55 |
# File 'lib/faye/websocket.rb', line 47 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) ⇒ Boolean
57 58 59 |
# File 'lib/faye/websocket.rb', line 57 def self.websocket?(env) ::WebSocket::Driver.websocket?(env) end |
Instance Method Details
#rack_response ⇒ Object
84 85 86 |
# File 'lib/faye/websocket.rb', line 84 def rack_response [ -1, {}, [] ] end |
#write(data) ⇒ Object
80 81 82 |
# File 'lib/faye/websocket.rb', line 80 def write(data) @stream.write(data) end |