Sha256: 93d59916b31f1db7986c9c98f1c041226977aa5af9e4b39072de62e7b15b2437

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

module Plezi

	module_function

	# Reviews the Redis connection, sets it up if it's missing and returns the Redis connection.
	#
	# A Redis connection will be automatically created if the `ENV['PL_REDIS_URL']` is set.
	# for example:
	#      ENV['PL_REDIS_URL'] = ENV['REDISCLOUD_URL']`
	# or
	#      ENV['PL_REDIS_URL'] = "redis://username:password@my.host:6379"
	def redis_connection
		return @redis if (@redis_sub_thread && @redis_sub_thread.alive?) && @redis
		return false unless defined?(Redis) && ENV['PL_REDIS_URL']
		@redis_uri ||= URI.parse(ENV['PL_REDIS_URL'])
		@redis ||= Redis.new(host: @redis_uri.host, port: @redis_uri.port, password: @redis_uri.password)
		raise "Redis connction failed for: #{ENV['PL_REDIS_URL']}" unless @redis
		@redis_sub_thread = Thread.new do
			begin
			Redis.new(host: @redis_uri.host, port: @redis_uri.port, password: @redis_uri.password).subscribe(Plezi::Settings.redis_channel_name) do |on|
					on.message do |channel, msg|
						begin
							data = YAML.load(msg)
							next if data[:server] == Plezi::Settings::UUID
							if data[:target]
								GRHttp::Base::WSHandler.unicast data[:target], data
							else
								GRHttp::Base::WSHandler.broadcast data
							end
						rescue => e
							Plezi.error e
						end
					end
				end
			rescue => e
				Plezi.error e
				retry
			end
		end
		@redis
	end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
plezi-0.10.1 lib/plezi/common/redis.rb