Sha256: 95c8c98c7267e2e26a5bcd1c408809abace85e296338cf6bcccf1eaf845aeed0

Contents?: true

Size: 1.35 KB

Versions: 1

Compression:

Stored size: 1.35 KB

Contents

module Subduino

  class ArdPS
    class << self

      #
      # Redis PubSub
      #
      # Direct access to the Redis instance.
      #
      def redis
        @redis ||= Redis.new(:timeout => 0) rescue false
      end

      #
      # Read PubSub
      #
      # Join 'subduino' channel and send messages to I/O
      #
      def read
        return Log.warn "[PubSub] Not started..." unless redis
        Thread.new do
          begin
            redis.subscribe('subduino') do |on|
              on.subscribe {|klass, num_subs| Log.info "[PubSub] Subscribed to #{klass} (#{num_subs} subscriptions)" }
              on.message do |klass, msg|
                Log.info "[PubSub] #{klass} - #{msg}"
                ArdIO.write msg
                # @redis.unsubscribe if msg == 'exit'
              end
              on.unsubscribe {|klass, num_subs| Log.info "[PubSub] Unsubscribed to #{klass} (#{num_subs} subscriptions)" }
            end
          rescue => e
            Log.error "[PubSub] Error #{e}"
            Log.error e.backtrace.join("\n")
          end

        end
      end

      #
      # Write PubSub
      #
      # Write a message to the 'subduino' PubSub channel.
      #
      def write(msg)
        redis.publish('subduino', msg)
      end


      #
      # Fatality
      #
      def stop!
        redis.disconnect if redis
      end

    end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
subduino-0.2.2 lib/subduino/ard_ps.rb