Sha256: a1d1036043d47bce2b39243c83d911ebc8eb05ec70efbb58b72a188b772c07ac

Contents?: true

Size: 1.14 KB

Versions: 11

Compression:

Stored size: 1.14 KB

Contents

module Vedeu

  # Provides the main loop for a Vedeu application.
  #
  class MainLoop

    trap('SIGTERM') { stop! }
    trap('TERM')    { stop! }
    trap('INT')     { stop! }

    class << self

      # :nocov:
      # Start the main loop.
      #
      # @return [void]
      # @yieldreturn [void] The client application.
      def start!
        @started = true
        @loop    = true

        while @loop
          yield

          safe_exit_point!
        end
      rescue Vedeu::VedeuInterrupt
        Vedeu.log(type:    :info,
                  message: 'Vedeu execution interrupted, exiting.')
      end
      # :nocov:

      # Signal that we wish to terminate the running application.
      #
      # @return [void]
      def stop!
        @loop = false
      end

      # :nocov:
      # Check the application has started and we wish to continue running.
      #
      # @raise [Vedeu::VedeuInterrupt] When we wish to terminate the running
      #   application.
      # @return [void]
      def safe_exit_point!
        fail Vedeu::VedeuInterrupt if @started && !@loop
      end
      # :nocov:

    end # Eigenclass

  end # MainLoop

end # Vedeu

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
vedeu-0.6.1 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.0 lib/vedeu/runtime/main_loop.rb
vedeu-0.5.13 lib/vedeu/runtime/main_loop.rb
vedeu-0.5.12 lib/vedeu/runtime/main_loop.rb
vedeu-0.5.11 lib/vedeu/runtime/main_loop.rb
vedeu-0.5.10 lib/vedeu/runtime/main_loop.rb
vedeu-0.5.9 lib/vedeu/runtime/main_loop.rb
vedeu-0.5.8 lib/vedeu/runtime/main_loop.rb
vedeu-0.5.7 lib/vedeu/runtime/main_loop.rb
vedeu-0.5.6 lib/vedeu/runtime/main_loop.rb
vedeu-0.5.5 lib/vedeu/runtime/main_loop.rb