class Twitter::Streaming::Connection
Attributes
ssl_socket_class[R]
tcp_socket_class[R]
Public Class Methods
new(options = {})
click to toggle source
# File lib/twitter/streaming/connection.rb, line 10 def initialize(options = {}) @tcp_socket_class = options.fetch(:tcp_socket_class) { TCPSocket } @ssl_socket_class = options.fetch(:ssl_socket_class) { OpenSSL::SSL::SSLSocket } @using_ssl = options.fetch(:using_ssl) { false } @write_pipe = nil end
Public Instance Methods
close()
click to toggle source
# File lib/twitter/streaming/connection.rb, line 42 def close @write_pipe&.write('q') end
connect(request)
click to toggle source
# File lib/twitter/streaming/connection.rb, line 33 def connect(request) client = new_tcp_socket(request.socket_host, request.socket_port) return client if !@using_ssl && request.using_proxy? client_context = OpenSSL::SSL::SSLContext.new ssl_client = @ssl_socket_class.new(client, client_context) ssl_client.connect end
stream(request, response)
click to toggle source
# File lib/twitter/streaming/connection.rb, line 17 def stream(request, response) # rubocop:disable Metrics/MethodLength client = connect(request) request.stream(client) read_pipe, @write_pipe = IO.pipe loop do read_ios, _write_ios, _exception_ios = IO.select([read_pipe, client]) case read_ios.first when client response << client.readpartial(1024) when read_pipe break end end client.close end
Private Instance Methods
new_tcp_socket(host, port)
click to toggle source
# File lib/twitter/streaming/connection.rb, line 48 def new_tcp_socket(host, port) @tcp_socket_class.new(Resolv.getaddress(host), port) end