class WebsocketRails::BaseController

Provides controller helper methods for developing a WebsocketRails controller. Action methods defined on a WebsocketRails controller can be mapped to events using the {EventMap} class.

Example WebsocketRails controller

class ChatController < WebsocketRails::BaseController
  # Can be mapped to the :client_connected event in the events.rb file.
  def new_user
    send_message :new_message, {:message => 'Welcome to the Chat Room!'}
  end
end

It is best to use the provided {DataStore} to temporarily persist data for each client between events. Read more about it in the {DataStore} documentation.

Public Class Methods

controller_name() click to toggle source
# File lib/websocket_rails/base_controller.rb, line 175
def self.controller_name
  self.name.underscore.gsub(/_controller$/,'')
end
filter_for_channels(*channels) click to toggle source

Tell the dispatcher to use channel filtering on specific channels. If supplied, the :catch_all => :method will be processed for every event that comes into the channel(s).

Example: To process events based upon the event_name inside :channel_one

filter_for_channels :channel_one

To process events based upon the event_name and a catch all

filter_for_channels :channel_one, :catch_all => :logger_method
# File lib/websocket_rails/base_controller.rb, line 63
def self.filter_for_channels(*channels)
  options = channels.last.is_a?(Hash) ? channels.pop : {}
  channels.each do |channel|
    WebsocketRails.filtered_channels[channel] = options[:catch_all].nil? ? self : [self, options[:catch_all]]
  end
end
inherited(controller) click to toggle source

Tell Rails that BaseController and children can be reloaded when in the Development environment.

# File lib/websocket_rails/base_controller.rb, line 43
def self.inherited(controller)
  unless controller.name == "WebsocketRails::InternalController" || Rails.version =~/^4/
    unloadable controller
  end
end

Public Instance Methods

accept_channel(data=nil) click to toggle source
# File lib/websocket_rails/base_controller.rb, line 116
def accept_channel(data=nil)
  channel_name = event.data[:channel]
  WebsocketRails[channel_name].subscribe connection
  trigger_success data
end
action_name() click to toggle source
# File lib/websocket_rails/base_controller.rb, line 160
def action_name
  @_action_name
end
broadcast_message(event_name, message, options={}) click to toggle source

Broadcasts a message to all connected clients. See {#send_message} for message passing details.

# File lib/websocket_rails/base_controller.rb, line 150
def broadcast_message(event_name, message, options={})
  options.merge! :connection => connection, :data => message
  event = Event.new( event_name, options )
  @_dispatcher.broadcast_message event if @_dispatcher.respond_to?(:broadcast_message)
end
client_id() click to toggle source

The numerical ID for the client connection that initiated the event. The ID is unique for each currently active connection but can not be used to associate a client between multiple connection attempts.

# File lib/websocket_rails/base_controller.rb, line 79
def client_id
  connection.id
end
connection() click to toggle source

Provides direct access to the connection object for the client that initiated the event that is currently being executed.

# File lib/websocket_rails/base_controller.rb, line 72
def connection
  @_event.connection
end
connection_store() click to toggle source
# File lib/websocket_rails/base_controller.rb, line 171
def connection_store
  connection.data_store
end
controller_name() click to toggle source
# File lib/websocket_rails/base_controller.rb, line 179
def controller_name
  self.class.controller_name
end
controller_store() click to toggle source

Provides access to the {DataStore} for the current controller. The {DataStore} provides convenience methods for keeping track of data associated with active connections. See it's documentation for more information.

# File lib/websocket_rails/base_controller.rb, line 167
def controller_store
  @_controller_store
end
data()
Alias for: message
deny_channel(data=nil) click to toggle source
# File lib/websocket_rails/base_controller.rb, line 122
def deny_channel(data=nil)
  trigger_failure data
end
event() click to toggle source

The {Event} object that triggered this action. Find the current event name with event.name Access the data sent with the event with event.data Find the event's namespace with event.namespace

# File lib/websocket_rails/base_controller.rb, line 87
def event
  @_event
end
message() click to toggle source

The current message that was passed from the client when the event was initiated. The message is typically a standard ruby Hash object. See the README for more information.

# File lib/websocket_rails/base_controller.rb, line 93
def message
  @_event.data
end
Also aliased as: data
request() click to toggle source
# File lib/websocket_rails/base_controller.rb, line 156
def request
  connection.request
end
send_message(event_name, message, options={}) click to toggle source

Sends a message to the client that initiated the current event being executed. Messages are serialized as JSON into a two element Array where the first element is the event and the second element is the message that was passed, typically a Hash.

To send an event under a namespace, add the `:namespace => :target_namespace` option.

send_message :new_message, message_hash, :namespace => :product

Nested namespaces can be passed as an array like the following:

send_message :new, message_hash, :namespace => [:products,:glasses]

See the {EventMap} documentation for more on mapping namespaced actions.

# File lib/websocket_rails/base_controller.rb, line 143
def send_message(event_name, message, options={})
  options.merge! :connection => connection, :data => message
  event = Event.new( event_name, options )
  @_dispatcher.send_message event if @_dispatcher.respond_to?(:send_message)
end
stop_event_propagation!() click to toggle source
# File lib/websocket_rails/base_controller.rb, line 126
def stop_event_propagation!
  event.propagate = false
end
trigger_failure(data=nil) click to toggle source

Trigger the failure callback function attached to the client event that triggered this action. The object passed to this method will be passed as an argument to the callback function on the client.

# File lib/websocket_rails/base_controller.rb, line 110
def trigger_failure(data=nil)
  event.success = Event::FAILED
  event.data = data
  event.trigger
end
trigger_success(data=nil) click to toggle source

Trigger the success callback function attached to the client event that triggered this action. The object passed to this method will be passed as an argument to the callback function on the client.

# File lib/websocket_rails/base_controller.rb, line 101
def trigger_success(data=nil)
  event.success = Event::SUCCEEDED
  event.data = data
  event.trigger
end

Private Instance Methods

delegate() click to toggle source
# File lib/websocket_rails/base_controller.rb, line 185
def delegate
  connection.controller_delegate
end
method_missing(method,*args,&block) click to toggle source
Calls superclass method
# File lib/websocket_rails/base_controller.rb, line 189
def method_missing(method,*args,&block)
  if delegate.respond_to? method
    delegate.send method, *args, &block
  else
    super
  end
end
trigger_finished() click to toggle source
# File lib/websocket_rails/base_controller.rb, line 197
def trigger_finished
  return if event.nil? || event.success
  if WebsocketRails.config.trigger_success_by_default
    event.success = Event::SUCCEEDED
  else
    event.success = Event::FINISHED_WITHOUT_RESULT
  end
  event.trigger
end