class ActionCable::SubscriptionAdapter::EventedRedis
:nodoc:
def broadcast(channel, payload)
def broadcast(channel, payload) redis_connection_for_broadcasts.publish(channel, payload) end
def ensure_reactor_running
def ensure_reactor_running return if EventMachine.reactor_running? && EventMachine.reactor_thread @@mutex.synchronize do Thread.new { EventMachine.run } unless EventMachine.reactor_running? Thread.pass until EventMachine.reactor_running? && EventMachine.reactor_thread end end
def initialize(*)
def initialize(*) ActiveSupport::Deprecation.warn(<<-MSG.squish) The "evented_redis" subscription adapter is deprecated and will be removed in Rails 5.2. Please use the "redis" adapter instead. MSG super @redis_connection_for_broadcasts = @redis_connection_for_subscriptions = nil end
def redis_connection_for_broadcasts
def redis_connection_for_broadcasts @redis_connection_for_broadcasts || @server.mutex.synchronize do @redis_connection_for_broadcasts ||= self.class.redis_connector.call(@server.config.cable) end end
def redis_connection_for_subscriptions
def redis_connection_for_subscriptions ensure_reactor_running @redis_connection_for_subscriptions || @server.mutex.synchronize do @redis_connection_for_subscriptions ||= self.class.em_redis_connector.call(@server.config.cable).tap do |redis| redis.on(:reconnect_failed) do @logger.error "[ActionCable] Redis reconnect failed." end redis.on(:failed) do @logger.error "[ActionCable] Redis connection has failed." end end end end
def shutdown
def shutdown redis_connection_for_subscriptions.pubsub.close_connection @redis_connection_for_subscriptions = nil end
def subscribe(channel, message_callback, success_callback = nil)
def subscribe(channel, message_callback, success_callback = nil) redis_connection_for_subscriptions.pubsub.subscribe(channel, &message_callback).tap do |result| result.callback { |reply| success_callback.call } if success_callback end end
def unsubscribe(channel, message_callback)
def unsubscribe(channel, message_callback) redis_connection_for_subscriptions.pubsub.unsubscribe_proc(channel, message_callback) end