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