class RuneRb::Engine::EventManager

Public Class Methods

new() click to toggle source
# File app/core/engine.rb, line 3
def initialize
  @scheduler = Rufus::Scheduler.new
end

Public Instance Methods

submit(event) click to toggle source
# File app/core/engine.rb, line 7
def submit(event)
  submit_delayed event, event.delay
end

Private Instance Methods

submit_delayed(event, delay) click to toggle source
# File app/core/engine.rb, line 13
def submit_delayed(event, delay)
  @scheduler.in("#{delay}") {|job|
    start = Time.now
     
    if event.running
      resubmit = true
      
      begin
        event.execute
      rescue Exception => e
        log = Logging.logger['exec']
        log.error "Error processing event"
        log.error e
        job.unschedule
        resubmit = false
      end
      
      if resubmit
        elapsed = Time.now - start
        remaining = event.delay - elapsed
        remaining = 0 if remaining <= 0
        submit_delayed event, remaining.round
      end
    else
      job.unschedule
    end
  }
end