Class: Twitter::Streaming::Connection
- Inherits:
-
Object
- Object
- Twitter::Streaming::Connection
- Defined in:
- lib/rbitter/override/gems/twitter/connection.rb
Constant Summary collapse
- MODIFIED =
true
Instance Attribute Summary collapse
-
#ssl_socket_class ⇒ Object
readonly
Returns the value of attribute ssl_socket_class.
-
#tcp_socket_class ⇒ Object
readonly
Returns the value of attribute tcp_socket_class.
Instance Method Summary collapse
-
#initialize(options = {}) ⇒ Connection
constructor
A new instance of Connection.
- #stream(request, response) ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ Connection
13 14 15 16 |
# File 'lib/rbitter/override/gems/twitter/connection.rb', line 13 def initialize( = {}) @tcp_socket_class = .fetch(:tcp_socket_class) { TCPSocket } @ssl_socket_class = .fetch(:ssl_socket_class) { OpenSSL::SSL::SSLSocket } end |
Instance Attribute Details
#ssl_socket_class ⇒ Object (readonly)
Returns the value of attribute ssl_socket_class.
11 12 13 |
# File 'lib/rbitter/override/gems/twitter/connection.rb', line 11 def ssl_socket_class @ssl_socket_class end |
#tcp_socket_class ⇒ Object (readonly)
Returns the value of attribute tcp_socket_class.
11 12 13 |
# File 'lib/rbitter/override/gems/twitter/connection.rb', line 11 def tcp_socket_class @tcp_socket_class end |
Instance Method Details
#stream(request, response) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/rbitter/override/gems/twitter/connection.rb', line 18 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) loop { begin body = ssl_client.read_nonblock(1024) # rubocop:disable AssignmentInCondition, WhileUntilModifier response << body rescue IO::WaitReadable # The reason for setting 90 seconds as a timeout is documented on: # https://dev.twitter.com/streaming/overview/connecting r, w, e = IO.select([ssl_client], [], [], 90) if r.nil? # If timeout occurs ssl_client.close raise Twitter::Error::ServerError.new("Connection stalled") else # If socket is readable retry end end } end |