def step
now = Time.now.utc
delta = now - @last_time
if delta >= 0.8
@last_time = now
@storage.get_schedules(delta, now).each do |sche|
trigger(sche)
end
end
@msgs = @storage.get_msgs if @msgs.empty?
processed = 0
collisions = 0
while msg = @msgs.shift
r = process(msg)
if r != false
processed += 1
else
collisions += 1
end
if collisions > 2
@msgs = @msgs[(@msgs.size / 2)..-1] || []
end
break if Time.now.utc - @last_time >= 0.8
end
if processed == 0
@sleep_time += 0.001
@sleep_time = 0.499 if @sleep_time > 0.499
sleep(@sleep_time)
else
@sleep_time = 0.000
end
end