class Slack::RealTime::Concurrency::Eventmachine::Socket

def connect

def connect
  @driver = Client.new(url, nil, options.merge(logger: logger))
end

def disconnect!

def disconnect!
  super
  EventMachine.stop_event_loop if EventMachine.reactor_running?
  @thread = nil
end

def ensure_reactor_running

Returns:
  • (Thread) -
def ensure_reactor_running
  return if EventMachine.reactor_running?
  reactor = Thread.new { EventMachine.run }
  Thread.pass until EventMachine.reactor_running?
  reactor
end

def restart_async(client, new_url)

def restart_async(client, new_url)
  @url = new_url
  @last_message_at = current_time
  @thread = ensure_reactor_running
  client.run_loop
  @thread
end

def send_data(message)

def send_data(message)
  logger.debug("#{self.class}##{__method__}") { message }
  driver.send(message)
end

def start_async(client)

def start_async(client)
  @thread = ensure_reactor_running
  if client.run_ping?
    EventMachine.add_periodic_timer client.websocket_ping_timer do
      client.run_ping!
    end
  end
  client.run_loop
  @thread
end