class Pakyow::Realtime::Server::Adapters::Redis::Subscriber

Public Class Methods

new(redis, channel, &callback) click to toggle source
# File lib/pakyow/realtime/server/adapters/redis.rb, line 241
def initialize(redis, channel, &callback)
  @redis, @channel, @callback = redis, channel, callback

  @thread = Thread.new do
    subscribe
  end
end

Public Instance Methods

disconnect() click to toggle source
# File lib/pakyow/realtime/server/adapters/redis.rb, line 249
def disconnect
  @thread.exit
  @redis.disconnect!
end
resubscribe() click to toggle source
# File lib/pakyow/realtime/server/adapters/redis.rb, line 272
def resubscribe
  sleep 0.25
  subscribe
end
subscribe() click to toggle source
# File lib/pakyow/realtime/server/adapters/redis.rb, line 254
def subscribe
  @redis.subscribe(@channel) do |on|
    on.message do |_, payload|
      begin
        @callback.call(payload)
      rescue => error
        Pakyow.logger.error "[Pakyow::Realtime::Server::Adapters::Redis] Subscriber callback failed: #{error}"
      end
    end
  end
rescue ::Redis::CannotConnectError
  Pakyow.logger.error "[Pakyow::Realtime::Server::Adapters::Redis] Subscriber disconnected"
  resubscribe
rescue => error
  Pakyow.logger.error "[Pakyow::Realtime::Server::Adapters::Redis] Subscriber crashed: #{error}"
  resubscribe
end