Class: ActionCable::Connection::Stream

Inherits:
Object
  • Object
show all
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

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

#closeObject



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_socketObject



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

#shutdownObject



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