class ActionChannels::Channels::Base
Attributes
clients[R]
message_sender[RW]
name[R]
Public Class Methods
new(attrs)
click to toggle source
# File lib/action_channels/channels/base.rb, line 7 def initialize(attrs) @name = attrs.fetch(:name) @clients = Set.new @message_sender = attrs.fetch :message_sender, MessageSenders::WebSocket.new end
Public Instance Methods
add_client(client)
click to toggle source
# File lib/action_channels/channels/base.rb, line 17 def add_client(client) clients << client ActionChannels.logger.info "The channel ##{self.name} added a client" ActionChannels.logger.debug "Count of client of channel ##{self.name} is #{self.clients.count}." end
after_message_subscribe(subscriber, details)
click to toggle source
# File lib/action_channels/channels/base.rb, line 61 def after_message_subscribe(subscriber, details) # nothing end
after_message_unsubscribe(subscriber, details)
click to toggle source
# File lib/action_channels/channels/base.rb, line 65 def after_message_unsubscribe(subscriber, details) # nothing end
notify_all(message)
click to toggle source
# File lib/action_channels/channels/base.rb, line 31 def notify_all(message) clients.each do |client| send_message client, message end end
process_custom_message(message)
click to toggle source
# File lib/action_channels/channels/base.rb, line 57 def process_custom_message(message) # nothing end
process_message(message)
click to toggle source
# File lib/action_channels/channels/base.rb, line 37 def process_message(message) ActionChannels.logger.debug "The channel ##{self.name} received a message #{message.inspect}" if message.systemic? process_system_message message else process_custom_message message end end
process_system_message(message)
click to toggle source
# File lib/action_channels/channels/base.rb, line 47 def process_system_message(message) case message.type when 'subscribe' on_subscribe message.author, message.details when 'unsubscribe' on_unsubscribe message.author, message.details else end end
remove_client(client)
click to toggle source
# File lib/action_channels/channels/base.rb, line 24 def remove_client(client) clients.delete client ActionChannels.logger.info "The channel ##{self.name} removed a client" ActionChannels.logger.debug "Count of client of channel ##{self.name} is #{self.clients.count}." end
send_message(receiver, message)
click to toggle source
# File lib/action_channels/channels/base.rb, line 13 def send_message(receiver, message) message_sender.do_send(receiver, message) end
Private Instance Methods
on_subscribe(subscriber, details)
click to toggle source
# File lib/action_channels/channels/base.rb, line 71 def on_subscribe(subscriber, details) add_client(subscriber) send_message subscriber, Message.new(channel: name, type: 'subscribed') after_message_subscribe subscriber, details end
on_unknown_type_message(message)
click to toggle source
# File lib/action_channels/channels/base.rb, line 83 def on_unknown_type_message(message) user, type = message.author, message.type send_message user, Message.new(channel: name, type: 'invalid_message', details: { error: "Unknown type of message: #{type}" }) end
on_unsubscribe(subscriber, details)
click to toggle source
# File lib/action_channels/channels/base.rb, line 77 def on_unsubscribe(subscriber, details) remove_client(subscriber) send_message subscriber, Message.new(channel: name, type: 'unsubscribed') after_message_unsubscribe subscriber, details end