Sha256: 0ea6d5cf54425ac690a65ea71926f0e56052871234b649868129b969b4e1afb8

Contents?: true

Size: 1.69 KB

Versions: 9

Compression:

Stored size: 1.69 KB

Contents

require 'drb'
require 'yaml'

module Adaptation

  module Mom

    class Mom

      def initialize mom_uri
        @mom_uri = mom_uri
      end

      def subscribe drb_uri
        unless get_subscribers.include?(drb_uri)
          add_subscriber drb_uri
          puts "Added new subscriber: #{drb_uri}"
          oapdaemon = DRbObject.new(nil, drb_uri)
          oapdaemon.subscription_result true
        end
      end

      def publish message, topic
        # Tell subscribed hosts to execute their adaptors
        puts "-----------------------------------"
        puts "Received message in topic: #{topic}"
        puts "#{message}"
        puts "-----------------------------------"
        get_subscribers.each do |uri|
          puts "Calling #{uri}"
          DRb.start_service
          oapdaemon = DRbObject.new(nil, uri)
          oapdaemon.process message, topic
        end
      end

      def start
        DRb.start_service(@mom_uri, self)
        puts "MOM started. Listening at #{@mom_uri}"
        DRb.thread.join # Don't exit just yet
      end

      def list
        puts "MOM subscriptions:"
        get_subscribers.each do |s|
          puts "  #{s}"
        end
        return
      end

    private

      def add_subscriber drb_uri
        subscribers = get_subscribers
        subscribers << drb_uri unless subscribers.include?(drb_uri)
        sf =  File.new('subscribers.yml', 'w')
        sf.write(YAML::dump(subscribers))
        sf.close
      end

      def get_subscribers
        if File.exists?('subscribers.yml')
          subscribers = YAML::load(File.open('subscribers.yml'))
        else
          subscribers = Array.new
        end
        subscribers
      end

    end

  end

end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
adaptation-0.0.3 lib/adaptation/mom.rb
adaptation-0.0.4 lib/adaptation/mom.rb
adaptation-0.0.6 lib/adaptation/mom.rb
adaptation-0.0.7 lib/adaptation/mom.rb
adaptation-0.0.9 lib/adaptation/mom.rb
adaptation-0.1.0 lib/adaptation/mom.rb
adaptation-0.0.5 lib/adaptation/mom.rb
adaptation-0.0.8 lib/adaptation/mom.rb
adaptation-0.1.1 lib/adaptation/mom.rb