# Model and handle the clients of the server
class Timer 
  
  
  attr_reader :id
  attr_reader :name
  
  def initialize(name, &block)
    @name     = name
    @id       = nil
    @block    = block
  end
  
  def set(value = 1.0, interval = 1.0)
     Woe::Server.set_timer(@id, value, interval);
  end
  
  def start(value = 1.0, interval = 1.0)
    @id = Woe::Server.new_timer()
    return @id if (@id < 0)
    self.set(value, interval);
    return @id
  end
  
  def self.add(name, value, interval, &block)
    timer = Timer.new(name, &block)
    return nil if timer.start(value, interval) < 0 
    @timers ||= {}
    @timers[timer.id] = timer
  end
  
  def self.get(id)
    @timers ||= {}
    @timers[id]  
  end
  
  def self.get_by_name(name) 
    @timers ||= {}
    @timers.select { |t| t.name == name }.first 
  end
  
  def self.remove(id)    
    @timers[id] = nil
  end
  
  def on_timer()
    @block.call
  end
  
  def self.on_timer(id) 
    timer = self.get(id)
    timer.on_timer if timer
  end
  
end

log "Mruby timer script loaded OK."