twitter-status-bot/.gems/gems/twitter-5.11.0/lib/twitter/streaming/connection.rb

28 lines
872 B
Ruby

require 'http/parser'
require 'openssl'
require 'resolv'
module Twitter
module Streaming
class Connection
def initialize(opts = {})
@tcp_socket_class = opts.fetch(:tcp_socket_class) { TCPSocket }
@ssl_socket_class = opts.fetch(:ssl_socket_class) { OpenSSL::SSL::SSLSocket }
end
attr_reader :tcp_socket_class, :ssl_socket_class
def stream(request, response)
client_context = OpenSSL::SSL::SSLContext.new
client = @tcp_socket_class.new(Resolv.getaddress(request.uri.host), request.uri.port)
ssl_client = @ssl_socket_class.new(client, client_context)
ssl_client.connect
request.stream(ssl_client)
while body = ssl_client.readpartial(1024) # rubocop:disable AssignmentInCondition, WhileUntilModifier
response << body
end
end
end
end
end