Sha256: 48635ec2a770f6284fc775af38c8ccaddbbcd8683768c3eb49022523c5a6b653

Contents?: true

Size: 894 Bytes

Versions: 4

Compression:

Stored size: 894 Bytes

Contents

module DeadlySerious
  module Engine
    class MasterMind
      attr_reader :factory

      def self.new_instance
        pid = Process.pid
        if @master.nil? || @master[:pid] != pid
          @master = {pid: pid, master: self.new}
        end
        @master[:master]
      end

      def initialize
        @factory = ZMQ::Context.new
        @counter = 1
        @minions = []
      end

      def spawn_minion
        minion_brain = yield(@factory, @counter)
        @counter += 1
        Minion.new(self, minion_brain).tap { |m| @minions << m }
      rescue ZMQ::Error => e
        raise if e.message !~ /has been destroyed/
        @factory = ZMQ::Context.new
        retry
      end

      def destroy_body_of(minion)
        @minions.delete(minion)
        suicide if @minions.empty?
      end

      private

      def suicide
        @factory.destroy
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
deadly_serious-2.0.0.pre.rc4 lib/deadly_serious/engine/channel/socket/master_mind.rb
deadly_serious-2.0.0.pre.rc3 lib/deadly_serious/engine/channel/socket/master_mind.rb
deadly_serious-2.0.0.pre.rc2 lib/deadly_serious/engine/channel/socket/master_mind.rb
deadly_serious-2.0.0.pre.rc1 lib/deadly_serious/engine/channel/socket/master_mind.rb