ltodo: use Rev’s PeriodicTimer to wrap EM’s two similar to it todo: close all connections on ‘stop’, I believe
# File lib/revem.rb, line 51 def add_timer interval, proc = nil, &block block ||= proc t = OneShotEMTimer.new(interval, false) # non repeating t.setup(block) t.attach(Rev::Loop.default) # fire 'er off ltodo: do we keep track of these timers in memory? t end
# File lib/revem.rb, line 59 def cancel_timer t t.detach if t.attached? # guess there's a case where EM you can say 'cancel' but it's already fired? kind of odd but it happens end
Make an outgoing connection
# File lib/revem.rb, line 66 def connect(addr, port, handler = Connection, *args, &block) block = args.pop if Proc === args[-1] # make sure we're a 'real' class here klass = if (handler and handler.is_a?(Class)) handler else Class.new( Connection ) {handler and include handler} end wrapped_child = CallsBackToEM.connect(addr, port, *args) # ltodo: args? what? they're used? also TODOC TODO FIX conn = klass.new(wrapped_child) # ltodo [?] addr, port, *args) wrapped_child.attach(Rev::Loop.default) # necessary conn.heres_your_socket(wrapped_child) wrapped_child.call_back_to_this(conn) # calls post_init for us yield conn if block_given? end
Compatibility noop. Handled automatically by libev
# File lib/revem.rb, line 113 def epoll; end
Compatibility noop. Handled automatically by libev
# File lib/revem.rb, line 116 def kqueue; end
Start the Reactor loop
# File lib/revem.rb, line 28 def run yield if block_given? Rev::Loop.default.run end
# File lib/revem.rb, line 63 def set_comm_inactivity_timeout *args; end
Set the maximum number of descriptors available to this process
# File lib/revem.rb, line 108 def set_descriptor_table_size(nfds) Rev::Utils.maxfds = nfds end
Start a TCP server on the given address and port
# File lib/revem.rb, line 85 def start_server(addr, port, handler = Connection, *args, &block) # make sure we're a 'real' class here klass = if (handler and handler.is_a?(Class)) handler else Class.new( Connection ) {handler and include handler} end server = Rev::TCPServer.new(addr, port, CallsBackToEM, *args) { |wrapped_child| conn = klass.new(wrapped_child) conn.heres_your_socket(wrapped_child) # ideally NOT have this :) wrapped_child.call_back_to_this(conn) block.call(conn) if block } server.attach(Rev::Loop.default) end
Stop the Reactor loop
# File lib/revem.rb, line 34 def stop_event_loop Rev::Loop.default.stop end
# File lib/revem.rb, line 103 def stop_server server server.close end