class WebsocketRails::Channel
Attributes
name[R]
subscribers[R]
Public Class Methods
new(channel_name)
click to toggle source
# File lib/websocket_rails/channel.rb, line 10 def initialize(channel_name) @subscribers = [] @name = channel_name @private = false end
Public Instance Methods
filter_with(controller, catch_all=nil)
click to toggle source
# File lib/websocket_rails/channel.rb, line 53 def filter_with(controller, catch_all=nil) filtered_channels[@name] = catch_all.nil? ? controller : [controller, catch_all] end
is_private?()
click to toggle source
# File lib/websocket_rails/channel.rb, line 57 def is_private? @private end
make_private()
click to toggle source
# File lib/websocket_rails/channel.rb, line 46 def make_private unless config.keep_subscribers_when_private? @subscribers.clear end @private = true end
subscribe(connection)
click to toggle source
# File lib/websocket_rails/channel.rb, line 16 def subscribe(connection) info "#{connection} subscribed to channel #{@name}" trigger 'subscriber_join', connection.user if config.broadcast_subscriber_events? @subscribers << connection send_token connection end
token()
click to toggle source
# File lib/websocket_rails/channel.rb, line 61 def token @token ||= channel_tokens[@name] ||= generate_unique_token end
trigger(event_name,data={},options={})
click to toggle source
# File lib/websocket_rails/channel.rb, line 30 def trigger(event_name,data={},options={}) options.merge! :channel => @name, :token => token options[:data] = data event = Event.new event_name, options info "[#{@name}] #{event.data.inspect}" send_data event end
trigger_event(event)
click to toggle source
# File lib/websocket_rails/channel.rb, line 40 def trigger_event(event) return if event.token != token info "[#{@name}] #{event.data.inspect}" send_data event end
unsubscribe(connection)
click to toggle source
# File lib/websocket_rails/channel.rb, line 23 def unsubscribe(connection) return unless @subscribers.include? connection info "#{connection} unsubscribed from channel #{@name}" @subscribers.delete connection trigger 'subscriber_part', connection.user if config.broadcast_subscriber_events? end
Private Instance Methods
generate_unique_token()
click to toggle source
# File lib/websocket_rails/channel.rb, line 67 def generate_unique_token begin new_token = SecureRandom.uuid end while channel_tokens.values.include?(new_token) new_token end
send_data(event)
click to toggle source
# File lib/websocket_rails/channel.rb, line 85 def send_data(event) return unless event.should_propagate? if WebsocketRails.synchronize? && event.server_token.nil? Synchronization.publish event end @subscribers.each do |subscriber| subscriber.trigger event end end
send_token(connection)
click to toggle source
# File lib/websocket_rails/channel.rb, line 75 def send_token(connection) options = { :channel => @name, :data => {:token => token}, :connection => connection } info 'sending token' Event.new('websocket_rails.channel_token', options).trigger end