Class: ActionCable::Connection::Stream
- Inherits:
-
Object
- Object
- ActionCable::Connection::Stream
- Defined in:
- lib/action_cable/connection/stream.rb
Overview
– This class is heavily based on faye-websocket-ruby
Copyright © 2010-2015 James Coglan
Instance Method Summary collapse
- #close ⇒ Object
- #each(&callback) ⇒ Object
- #hijack_rack_socket ⇒ Object
-
#initialize(event_loop, socket) ⇒ Stream
constructor
:nodoc:.
- #receive(data) ⇒ Object
- #shutdown ⇒ Object
- #write(data) ⇒ Object
Constructor Details
#initialize(event_loop, socket) ⇒ Stream
:nodoc:
8 9 10 11 12 13 14 |
# File 'lib/action_cable/connection/stream.rb', line 8 def initialize(event_loop, socket) @event_loop = event_loop @socket_object = socket @stream_send = socket.env['stream.send'] @rack_hijack_io = nil end |
Instance Method Details
#close ⇒ Object
20 21 22 23 |
# File 'lib/action_cable/connection/stream.rb', line 20 def close shutdown @socket_object.client_gone end |
#each(&callback) ⇒ Object
16 17 18 |
# File 'lib/action_cable/connection/stream.rb', line 16 def each(&callback) @stream_send ||= callback end |
#hijack_rack_socket ⇒ Object
40 41 42 43 44 45 46 47 |
# File 'lib/action_cable/connection/stream.rb', line 40 def hijack_rack_socket return unless @socket_object.env['rack.hijack'] @socket_object.env['rack.hijack'].call @rack_hijack_io = @socket_object.env['rack.hijack_io'] @event_loop.attach(@rack_hijack_io, self) end |
#receive(data) ⇒ Object
36 37 38 |
# File 'lib/action_cable/connection/stream.rb', line 36 def receive(data) @socket_object.parse(data) end |
#shutdown ⇒ Object
25 26 27 |
# File 'lib/action_cable/connection/stream.rb', line 25 def shutdown clean_rack_hijack end |
#write(data) ⇒ Object
29 30 31 32 33 34 |
# File 'lib/action_cable/connection/stream.rb', line 29 def write(data) return @rack_hijack_io.write(data) if @rack_hijack_io return @stream_send.call(data) if @stream_send rescue EOFError, Errno::ECONNRESET @socket_object.client_gone end |