Sha256: d77051d0c0dd9095fba86ffc492dbf60e74ddd523d993f7acd44db068d120358
Contents?: true
Size: 1.11 KB
Versions: 1
Compression:
Stored size: 1.11 KB
Contents
require 'timeout' module EventLoop class << self SELECTOR = NIO::Selector.new TIMERS = [] def add_timer(timer) timer.start_time = Time.now.to_f + timer.time TIMERS << timer end def register(io, interest=(:rw), &callback) monitor = SELECTOR.register(io, interest) monitor.value = { callback: callback, } end def deregister(io) SELECTOR.deregister(io) end def run_once SELECTOR.select(0.2) do |monitor| # Timeout for 1 secs monitor.value[:timer].stop unless monitor.value[:timer].nil? monitor.value[:callback].call(monitor) end EventLoop.timer_once end def timer_once now_time = Time.now.to_f TIMERS.delete_if do |timer| if timer.start_time < now_time timer.callback.call true end end end def start return if running? @stop = false until @stop run_once end @stop = nil end def stop @stop = true end def running? @stop = true if @stop.nil? !@stop end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
em-midori-0.1.12 | lib/midori/core_ext/event_loop.rb |