Class: Twitter::Streaming::Connection

Inherits:
Object
  • Object
show all
Defined in:
lib/twitter/streaming/connection.rb

Overview

Manages TCP/SSL connections for streaming

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Twitter::Streaming::Connection

Initializes a new Connection object

Examples:

connection = Twitter::Streaming::Connection.new

Parameters:

  • options (Hash) (defaults to: {})

    A customizable set of options.



32
33
34
35
36
# File 'lib/twitter/streaming/connection.rb', line 32

def initialize(options = {})
  @tcp_socket_class = options.fetch(:tcp_socket_class) { TCPSocket } # steep:ignore UnknownConstant
  @ssl_socket_class = options.fetch(:ssl_socket_class) { OpenSSL::SSL::SSLSocket } # steep:ignore UnknownConstant
  @using_ssl = options.fetch(:using_ssl, false)
end

Instance Attribute Details

#ssl_socket_classClass (readonly)

Returns the SSL socket class

Examples:

connection.ssl_socket_class

Returns:

  • (Class)


23
24
25
# File 'lib/twitter/streaming/connection.rb', line 23

def ssl_socket_class
  @ssl_socket_class
end

#tcp_socket_classClass (readonly)

Returns the SSL socket class

Examples:

connection.ssl_socket_class

Returns:

  • (Class)


23
24
25
# File 'lib/twitter/streaming/connection.rb', line 23

def tcp_socket_class
  @tcp_socket_class
end

Instance Method Details

#closeInteger?

Closes the connection

Examples:

connection.close

Returns:

  • (Integer, nil)


84
85
86
# File 'lib/twitter/streaming/connection.rb', line 84

def close
  @write_pipe&.write("q")
end

#connect(request) ⇒ TCPSocket, OpenSSL::SSL::SSLSocket

Connects to the specified host and port

Examples:

connection.connect(request)

Parameters:

  • request (HTTP::Request)

    The HTTP request.

Returns:

  • (TCPSocket, OpenSSL::SSL::SSLSocket)


69
70
71
72
73
74
75
76
# File 'lib/twitter/streaming/connection.rb', line 69

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 # steep:ignore UnknownConstant
  ssl_client = @ssl_socket_class.new(client, client_context)
  ssl_client.connect
end

#stream(request, response) ⇒ void

This method returns an undefined value.

Streams data from the connection

Examples:

connection.stream(request, response)

Parameters:



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/twitter/streaming/connection.rb', line 46

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