lib/zmachine/timers.rb in zmachine-0.2.1 vs lib/zmachine/timers.rb in zmachine-0.3.0

- old
+ new

@@ -1,61 +1,33 @@ module ZMachine - # Creates a one-time timer - # - # timer = ZMachine::Timer.new(5) do - # # this will never fire because we cancel it - # end - # timer.cancel - # class Timer - # Create a new timer that fires after a given number of seconds - def initialize(interval, callback=nil, &block) - @signature = ZMachine.add_timer(interval, callback || block) - end - # Cancel the timer - def cancel - ZMachine.cancel_timer(@signature) - end - end + attr_accessor :interval - # Creates a periodic timer - # - # @example - # n = 0 - # timer = ZMachine::PeriodicTimer.new(5) do - # puts "the time is #{Time.now}" - # timer.cancel if (n+=1) > 5 - # end - # - class PeriodicTimer - # Create a new periodic timer that executes every interval seconds def initialize(interval, callback=nil, &block) @interval = interval - @code = callback || block - @cancelled = false - @work = method(:fire) + @callback = callback || block schedule end - # Cancel the periodic timer - def cancel - @cancelled = true + def schedule + @timer = ZMachine.add_timer(@interval, method(:fire)) end - # Fire the timer every interval seconds - attr_accessor :interval + def fire + @callback.call + end - # @private - def schedule - ZMachine.add_timer(@interval, @work) + def cancel + @timer.cancel end + end - # @private + class PeriodicTimer < Timer + def fire - unless @cancelled - @code.call - schedule - end + super + schedule end + end end