class Gazouillis::Stream

This class concern is to handle stream connections.

Attributes

http_parser[R]
request[R]
stream[R]

Public Class Methods

new(path, opts) click to toggle source
# File lib/gazouillis/stream.rb, line 9
def initialize(path, opts)
  options = default_options.merge(opts)
  @request = Request.new(path, options)
  @stream = set_stream(TCPSocket.new options[:host], options[:port])
  @http_parser = Http::Parser.new
  http_parser.on_body = on_message_callback
  http_parser.on_headers_complete = on_headers_complete
end

Public Instance Methods

close() click to toggle source
# File lib/gazouillis/stream.rb, line 23
def close
  stream.to_io.close
end
on_message(message) click to toggle source
# File lib/gazouillis/stream.rb, line 27
def on_message(message)
  # Hook method. To be override.
end
open() click to toggle source
# File lib/gazouillis/stream.rb, line 18
def open
  stream.write request
  handle_connection
end

Private Instance Methods

default_options() click to toggle source
# File lib/gazouillis/stream.rb, line 57
def default_options
  {
    host: 'stream.twitter.com',
    port: 443,
    method: "GET"
  }
end
handle_connection() click to toggle source
# File lib/gazouillis/stream.rb, line 41
def handle_connection
  stream.each_line {|line| http_parser << line } unless stream.closed?
end
on_headers_complete() click to toggle source
# File lib/gazouillis/stream.rb, line 51
def on_headers_complete
  Proc.new do
    Actor.current.close if http_parser.status_code != 200
  end
end
on_message_callback() click to toggle source
# File lib/gazouillis/stream.rb, line 45
def on_message_callback
  Proc.new do |chunk|
    Actor.current.on_message chunk
  end
end
set_stream(socket) click to toggle source
# File lib/gazouillis/stream.rb, line 33
def set_stream(socket)
  OpenSSL::SSL::SSLSocket.new(socket.to_io,
                              OpenSSL::SSL::SSLContext.new).tap {|ssl|
    ssl.sync = true
    ssl.connect
  }
end