class Mastodon::Streaming::Connection

Socket/Connection handler.

Attributes

ssl_socket_class[R]
tcp_socket_class[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/mastodon/streaming/connection.rb, line 13
def initialize(options = {})
  @tcp_socket_class = options.fetch(:tcp_socket_class) { TCPSocket }
  @ssl_socket_class = options.fetch(:ssl_socket_class) do
    OpenSSL::SSL::SSLSocket
  end
  @using_ssl = options.fetch(:using_ssl) { false }
end

Public Instance Methods

connect(request) click to toggle source
# File lib/mastodon/streaming/connection.rb, line 31
def connect(request)
  client = new_tcp_socket(request.socket_host, request.socket_port)
  return client if !@using_ssl || (!@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/mastodon/streaming/connection.rb, line 21
def stream(request, response)
  client = connect(request)
  request.stream(client)
  # rubocop:disable AssignmentInCondition
  while body = client.readpartial(1024)
    response << body
  end
  # rubocop:enable AssignmentInCondition
end

Private Instance Methods

new_tcp_socket(host, port) click to toggle source
# File lib/mastodon/streaming/connection.rb, line 42
def new_tcp_socket(host, port)
  @tcp_socket_class.new(Resolv.getaddress(host), port)
end