Sha256: 745ef5fb880dd105622f4100bd2dad47ca07244b1acc5cb15758970bd1b24eb7

Contents?: true

Size: 1015 Bytes

Versions: 26

Compression:

Stored size: 1015 Bytes

Contents

require_relative 'process_monitor'

module Salemove
  module ProcessHandler

    def self.start_composite(&block)
      CompositeProcess.new(&block).start
    end

    class CompositeProcess
      
      def initialize(&block)
        @process_spawners = []
        @monitor = CompositeProcessMonitor.new
        instance_eval &block if block_given?
      end

      def add(process, service)
        @monitor.add process.process_monitor
        @process_spawners << Proc.new { process.spawn service, blocking: false }
      end

      def start
        @process_spawners.each(&:call)
        @monitor.start
        block
      end

      def block
        sleep 1 while @monitor.running?
      end

    end

    class CompositeProcessMonitor < ProcessMonitor

      def initialize
        @monitors = []
      end

      def add(monitor)
        @monitors << monitor
      end

      def stop
        @monitors.each(&:stop)
        sleep 1 while @monitors.any?(&:alive?)
        super
      end

    end

  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
process_handler-4.1.0 lib/salemove/process_handler/composite_process.rb
process_handler-4.0.0 lib/salemove/process_handler/composite_process.rb
process_handler-3.0.0 lib/salemove/process_handler/composite_process.rb
process_handler-2.3.0 lib/salemove/process_handler/composite_process.rb
process_handler-2.2.0 lib/salemove/process_handler/composite_process.rb
process_handler-2.1.0 lib/salemove/process_handler/composite_process.rb
process_handler-2.0.0 lib/salemove/process_handler/composite_process.rb
process_handler-1.1.2 lib/salemove/process_handler/composite_process.rb
process_handler-1.1.1 lib/salemove/process_handler/composite_process.rb
process_handler-1.1.0 lib/salemove/process_handler/composite_process.rb
process_handler-1.0.0 lib/salemove/process_handler/composite_process.rb
process_handler-0.3.0 lib/salemove/process_handler/composite_process.rb
process_handler-0.2.9 lib/salemove/process_handler/composite_process.rb
process_handler-0.2.8 lib/salemove/process_handler/composite_process.rb
process_handler-0.2.7 lib/salemove/process_handler/composite_process.rb
process_handler-0.2.5 lib/salemove/process_handler/composite_process.rb
process_handler-0.2.4 lib/salemove/process_handler/composite_process.rb
process_handler-0.2.3 lib/salemove/process_handler/composite_process.rb
process_handler-0.2.2 lib/salemove/process_handler/composite_process.rb
process_handler-0.2.1 lib/salemove/process_handler/composite_process.rb