Sha256: ef01f67a73293c5578df57ee2ec8738d91647bdda76e4eb10e47295ddd350177

Contents?: true

Size: 1.61 KB

Versions: 23

Compression:

Stored size: 1.61 KB

Contents

module Vedeu

  module Runtime

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

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

      class << self

        # :nocov:

        # @param mode [Symbol]
        def mode_switch!(mode = nil)
          @loop        = false
          @mode_switch = true

          Vedeu::Terminal::Mode.switch_mode!(mode)

          Vedeu.trigger(:_drb_restart_)

          fail Vedeu::Error::ModeSwitch
        end

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

          Vedeu.trigger(:_refresh_cursor_, Vedeu.focus)

          Vedeu.trigger(:_refresh_)

          while @loop
            yield

            safe_exit_point!
          end
        rescue Vedeu::Error::Interrupt
          Vedeu.log(message: 'Vedeu execution interrupted, exiting.'.freeze)
        end

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

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

        # :nocov:

      end # Eigenclass

    end # MainLoop

  end # Runtime

end # Vedeu

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
vedeu-0.8.0 lib/vedeu/runtime/main_loop.rb
vedeu-0.7.4 lib/vedeu/runtime/main_loop.rb
vedeu-0.7.3 lib/vedeu/runtime/main_loop.rb
vedeu-0.7.2 lib/vedeu/runtime/main_loop.rb
vedeu-0.7.1 lib/vedeu/runtime/main_loop.rb
vedeu-0.7.0 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.71 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.70 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.69 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.68 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.67 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.66 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.65 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.64 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.63 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.62 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.61 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.60 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.59 lib/vedeu/runtime/main_loop.rb
vedeu-0.6.58 lib/vedeu/runtime/main_loop.rb