class ActionChannels::Client

Attributes

connect[RW]
is_connected[RW]
message_sender[R]
url[R]

Public Class Methods

new(url, options = {}) click to toggle source
# File lib/action_channels/client.rb, line 18
def initialize(url, options = {})
  @url = url
  self.is_connected = false
  @message_sender = options.fetch :message_sender, MessageSenders::WebSocket.new
end
send_message(url, message, options = {}) click to toggle source
# File lib/action_channels/client.rb, line 6
def send_message(url, message, options = {})
  client = new(url, options)
  client.start
  client.send_message(message)
  client.stop

  true
end

Public Instance Methods

connected?() click to toggle source
# File lib/action_channels/client.rb, line 55
def connected?
  is_connected
end
send_message(message) click to toggle source
# File lib/action_channels/client.rb, line 47
def send_message(message)
  return false unless connected?

  message_sender.do_send(connect, message)

  true
end
start(waits_at = 20) click to toggle source
# File lib/action_channels/client.rb, line 24
def start(waits_at = 20)
  return true if connected?

  do_connect

  Timeout::timeout(waits_at, Errors::NotConnected) do
    until connected? do
      sleep 1
    end
  end

  true
end
stop() click to toggle source
# File lib/action_channels/client.rb, line 38
def stop
  if connected?
    connect.close
    connect = nil
  end

  true
end

Private Instance Methods

do_connect() click to toggle source
# File lib/action_channels/client.rb, line 63
def do_connect
  client = self

  ::NIO::WebSocket.connect(url) do |websocket|
    on_open = lambda do |_|
      client.send 'connect=', websocket
      client.send 'is_connected=', true
    end

    websocket.on :open, on_open
  end
end