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
-
(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