class Rookout::ComWs::WebsocketConnection

Attributes

url[R]

Public Class Methods

new(url, proxy) click to toggle source
# File lib/rookout/com_ws/websocket_client.rb, line 89
def initialize url, proxy
  @url = url
  @proxy = proxy

  @uri = URI.parse @url
  @secure = %w[https wss].include? @uri.scheme

  @socket = nil

  @proxy_connected = false
end

Public Instance Methods

close() click to toggle source
# File lib/rookout/com_ws/websocket_client.rb, line 139
def close
  return if @socket.nil?

  @socket.close
  @socket = nil
end
connect(driver) click to toggle source
# File lib/rookout/com_ws/websocket_client.rb, line 101
def connect driver
  @socket = tcp_connect

  proxy_connect driver if @proxy

  @socket = ssl_connect @socket if @secure
end
proxy_connect(driver) click to toggle source
# File lib/rookout/com_ws/websocket_client.rb, line 109
def proxy_connect driver
  connection_error = nil
  @proxy_connected = false
  proxy = driver.proxy @proxy

  proxy.on :connect do
    @proxy_connected = true
  end

  proxy.on :error do |error|
    connection_error = error
  end

  proxy.start

  proxy.parse read_char until @proxy_connected == true || !connection_error.nil?

  raise Exceptions::RookProxyException, connection_error unless connection_error.nil?
end
read_char() click to toggle source
# File lib/rookout/com_ws/websocket_client.rb, line 131
def read_char
  @socket.getc
end
write(buffer) click to toggle source
# File lib/rookout/com_ws/websocket_client.rb, line 135
def write buffer
  @socket << buffer
end

Private Instance Methods

ssl_connect(tcp_socket) click to toggle source
# File lib/rookout/com_ws/websocket_client.rb, line 158
def ssl_connect tcp_socket
  ctx = ::OpenSSL::SSL::SSLContext.new
  ctx.min_version = ::OpenSSL::SSL::TLS1_2_VERSION
  cert_store = ::OpenSSL::X509::Store.new
  cert_store.set_default_paths
  ctx.cert_store = cert_store

  ssl_socket = ::OpenSSL::SSL::SSLSocket.new tcp_socket, ctx
  ssl_socket.hostname = @uri.host
  ssl_socket.sync_close = true
  ssl_socket.connect

  ssl_socket
end
tcp_connect() click to toggle source
# File lib/rookout/com_ws/websocket_client.rb, line 148
def tcp_connect
  if @proxy
    uri = URI(@proxy)
    TCPSocket.new uri.host, uri.port
  else
    TCPSocket.new @uri.host,
                  @uri.port || (@secure ? 443 : 80)
  end
end