class Faye::RackStream

Public Class Methods

new(socket_object) click to toggle source
# File lib/faye/rack_stream.rb, line 18
def initialize(socket_object)
  @socket_object = socket_object
  @connection    = socket_object.env['em.connection']
  @stream_send   = socket_object.env['stream.send']

  if socket_object.env['rack.hijack']
    socket_object.env['rack.hijack'].call
    @rack_hijack_io = socket_object.env['rack.hijack_io']
    EventMachine.attach(@rack_hijack_io, Reader) do |reader|
      @rack_hijack_io_reader = reader
      reader.stream = self
    end
  end

  @connection.socket_stream = self if @connection.respond_to?(:socket_stream)
end

Public Instance Methods

clean_rack_hijack() click to toggle source
# File lib/faye/rack_stream.rb, line 35
def clean_rack_hijack
  return unless @rack_hijack_io
  @rack_hijack_io_reader.close_connection_after_writing
  @rack_hijack_io = @rack_hijack_io_reader = nil
end
close_connection() click to toggle source
# File lib/faye/rack_stream.rb, line 41
def close_connection
  clean_rack_hijack
  @connection.close_connection if @connection
end
close_connection_after_writing() click to toggle source
# File lib/faye/rack_stream.rb, line 46
def close_connection_after_writing
  clean_rack_hijack
  @connection.close_connection_after_writing if @connection
end
each(&callback) click to toggle source
# File lib/faye/rack_stream.rb, line 51
def each(&callback)
  @stream_send ||= callback
end
fail() click to toggle source
# File lib/faye/rack_stream.rb, line 55
def fail
end
receive(data) click to toggle source
# File lib/faye/rack_stream.rb, line 58
def receive(data)
end
write(data) click to toggle source
# File lib/faye/rack_stream.rb, line 61
def write(data)
  return @rack_hijack_io.write(data) if @rack_hijack_io
  return @stream_send.call(data) if @stream_send
rescue => e
  fail if EOFError === e
end