class AsyncCable::Connection

Attributes

close_code[W]
close_reason[RW]
request[R]

Public Class Methods

broadcast(stream_name, data) click to toggle source

Transmit data to all WS connections in current channel and provided stream. @param data [Hash]

# File lib/async_cable/connection.rb, line 29
def broadcast(stream_name, data)
  logger.debug { "#{name}.broadcast data=#{data.inspect}" }

  Registry.each(channel_name, stream_name) do |conn|
    conn.transmit(data) unless conn.closed?
  end
end
channel_name() click to toggle source

@return [String]

# File lib/async_cable/connection.rb, line 18
def channel_name
  @channel_name
end
identified_as(channel) click to toggle source

sets channel_name for connection class

# File lib/async_cable/connection.rb, line 13
def identified_as(channel)
  @channel_name = channel.to_s
end
inherited(subclass) click to toggle source
# File lib/async_cable/connection.rb, line 8
def inherited(subclass)
  subclass.identified_as subclass.name.demodulize.underscore
end
logger() click to toggle source

@return [Logger]

# File lib/async_cable/connection.rb, line 23
def logger
  AsyncCable.config.logger
end
new(*args, &block) click to toggle source
Calls superclass method
# File lib/async_cable/connection.rb, line 42
def initialize(*args, &block)
  super
  @mutex = Mutex.new
end

Public Instance Methods

channel_name() click to toggle source

@return [String]

# File lib/async_cable/connection.rb, line 124
def channel_name
  self.class.channel_name
end
close_clean?() click to toggle source

Was WS connection closed clean or dirty. @return [Boolean]

# File lib/async_cable/connection.rb, line 98
def close_clean?
  close_code == Protocol::WebSocket::Error::NO_ERROR
end
close_code() click to toggle source

WS connection close code 1000 - clean close @return [Integer]

# File lib/async_cable/connection.rb, line 92
def close_code
  @close_code || Protocol::WebSocket::Error::NO_ERROR
end
handle_close() click to toggle source

Called when connection being closed. @see close_code close_reason for close details.

# File lib/async_cable/connection.rb, line 116
def handle_close
  logger.debug { "#{self.class}#handle_close clean=#{close_clean?} code=#{close_code} reason=#{close_reason}" }
  close
  Registry.remove(channel_name, stream_name, self)
  on_close
end
handle_open(env) click to toggle source

Called when connection being opened. @param env [Hash] @raise [AsyncCable::Errors::StreamNameNotSet] if stream_for was not called @raise [AsyncCable::Errors::UnauthorizedError] if reject_unauthorized was called

# File lib/async_cable/connection.rb, line 106
def handle_open(env)
  logger.debug { "#{self.class}#handle_open" }
  @request = Rack::Request.new(env)
  on_open
  raise Errors::StreamNameNotSet, self.class.name unless defined?(@stream_name)
  Registry.add(channel_name, stream_name, self)
end
logger() click to toggle source

@return [Logger]

# File lib/async_cable/connection.rb, line 129
def logger
  self.class.logger
end
on_close() click to toggle source

Will be executed when WS connection closed. see close_code, close_reason for details.

# File lib/async_cable/connection.rb, line 59
def on_close
end
on_data(data) click to toggle source

Will be executed when data received from WS client. @param data [Hash]

# File lib/async_cable/connection.rb, line 54
def on_data(data)
end
on_open() click to toggle source

Will be executed when WS connection opened. stream_for must be called here with stream name

# File lib/async_cable/connection.rb, line 49
def on_open
end
reject_unauthorized(reason = nil) click to toggle source

@param reason [String,NilClass] exception message. @raise [AsyncCable::UnauthorizedError]

# File lib/async_cable/connection.rb, line 85
def reject_unauthorized(reason = nil)
  raise UnauthorizedError, reason
end
stream_for(stream_name) click to toggle source

@param stream_name [String]

# File lib/async_cable/connection.rb, line 74
def stream_for(stream_name)
  @stream_name = stream_name
end
stream_name() click to toggle source

@return [String] stream name

# File lib/async_cable/connection.rb, line 79
def stream_name
  @stream_name
end
transmit(data) click to toggle source

call this method to transmit data to current WS client @param data [Hash]

# File lib/async_cable/connection.rb, line 64
def transmit(data)
  logger.debug { "#{self.class}#transmit stream_name=#{stream_name} data=#{data.inspect}" }

  @mutex.synchronize do
    write(data)
    flush
  end
end