Sha256: 58f8485bd219c11cdf01c102e1c3f993bd0f59a201e6f9f4f9d3898c596264b0

Contents?: true

Size: 980 Bytes

Versions: 2

Compression:

Stored size: 980 Bytes

Contents

module Backport
  module Server
    # A Backport periodical interval server.
    #
    class Interval < Base
      # @param period [Float] The interval time in seconds.
      # @param block [Proc] The proc to run on each interval.
      # @yieldparam [Interval]
      def initialize period, &block
        @period = period
        @block = block
        @ready = false
        @mutex = Mutex.new
      end

      def starting
        @ready = false
        run_ready_thread
      end

      def tick
        return unless @ready
        @mutex.synchronize do
          @block.call self
          @ready = false
        end
      end

      private

      def run_ready_thread
        Thread.new do
          until stopped?
            sleep @period
            break if stopped?
            @mutex.synchronize { @ready = true }
            changed
            notify_observers self
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
backport-1.1.2 lib/backport/server/interval.rb
backport-1.1.1 lib/backport/server/interval.rb