From 5743cf30ff7714c7aa83133b350af22840473733 Mon Sep 17 00:00:00 2001 From: Pratik Naik Date: Mon, 13 Apr 2015 21:45:03 -0500 Subject: Add Broadcaster to publish to redis channels --- lib/action_cable/broadcaster.rb | 18 ++++++++++++++++++ lib/action_cable/server.rb | 12 ++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 lib/action_cable/broadcaster.rb (limited to 'lib/action_cable') diff --git a/lib/action_cable/broadcaster.rb b/lib/action_cable/broadcaster.rb new file mode 100644 index 0000000000..b2352876e9 --- /dev/null +++ b/lib/action_cable/broadcaster.rb @@ -0,0 +1,18 @@ +module ActionCable + class Broadcaster + attr_reader :server, :channel, :redis + delegate :logger, to: :server + + def initialize(server, channel) + @server = server + @channel = channel + @redis = @server.threaded_redis + end + + def broadcast(message) + redis.publish channel, message.to_json + logger.info "[ActionCable] Broadcasting to channel (#{channel}): #{message}" + end + + end +end diff --git a/lib/action_cable/server.rb b/lib/action_cable/server.rb index bfadcee229..70b0610e92 100644 --- a/lib/action_cable/server.rb +++ b/lib/action_cable/server.rb @@ -38,10 +38,22 @@ module ActionCable end end + def threaded_redis + @threaded_redis ||= Redis.new(redis_config) + end + def remote_connections @remote_connections ||= RemoteConnections.new(self) end + def broadcaster_for(channel) + Broadcaster.new(self, channel) + end + + def broadcast(channel, message) + broadcaster_for(channel).broadcast(message) + end + def connection_identifiers @connection_class.identifiers end -- cgit v1.2.3