class Steep::Server::DelayQueue

def cancel

def cancel
  @cancelled = true
  queue.clear()
end

def execute(&block)

def execute(&block)
  @last_task = block
  scheduled_at = Time.now + delay
  queue << [scheduled_at, block]
end

def initialize(delay:)

def initialize(delay:)
  @delay = delay
  @queue = Thread::Queue.new
  @thread = Thread.new do
    while (scheduled_at, proc = queue.pop)
      diff = scheduled_at - Time.now
      case
      when diff > 0.1
        sleep diff
      when diff > 0
        while Time.now < scheduled_at
          # nop
          sleep 0
        end
      end
      if proc.equal?(last_task)
        unless @cancelled
          proc[]
        end
      end
    end
  end
end