Sha256: 92dcde05b4338dab968f2a734fb9b9f5e8ebc768a58a4c3ae2fed9543a852f96
Contents?: true
Size: 1.74 KB
Versions: 2
Compression:
Stored size: 1.74 KB
Contents
module Backport # The Backport server controller. # class Machine def initialize @stopped = true @mutex = Mutex.new end # Run the machine. If a block is provided, it gets executed before the # maching starts its main loop. The main loop blocks program execution # until the machine is stopped. # # @yieldparam [self] # @return [void] def run return unless stopped? servers.clear @stopped = false yield self if block_given? run_server_thread end # Stop the machine. # # @return [void] def stop servers.map(&:stop) servers.clear @stopped = true end # True if the machine is stopped. # def stopped? @stopped ||= false end # Add a server to the machine. The server will be started when the machine # starts. If the machine is already running, the server will be started # immediately. # # @param server [Server::Base] # @return [void] def prepare server server.add_observer self servers.push server server.start unless stopped? end # @return [Array<Server::Base>] def servers @servers ||= [] end # @param server [Server::Base] # @return [void] def update server if server.stopped? servers.delete server stop if servers.empty? else mutex.synchronize { server.tick } end end private # @return [Mutex] attr_reader :mutex # Start the thread that updates servers via the #tick method. # # @return [void] def run_server_thread servers.map(&:start) sleep 0.1 until stopped? end end end
Version data entries
2 entries across 2 versions & 2 rubygems
Version | Path |
---|---|
getargv-0.3.3-universal-darwin | vendor/bundle/ruby/3.3.0/gems/backport-1.2.0/lib/backport/machine.rb |
backport-1.2.0 | lib/backport/machine.rb |