class Net::SSH::Connection::EventLoop
EventLoop can be shared across multiple sessions
one issue is with blocks passed to loop, etc. they should get current session as parameter, but in case you're using multiple sessions in an event loop it doesnt makes sense and we don't pass session.
Public Class Methods
          new(logger=nil)
          
          click to toggle source
          
        
        
        # File lib/net/ssh/connection/event_loop.rb, line 16 def initialize(logger=nil) self.logger = logger @sessions = [] end
Public Instance Methods
          ev_preprocess() { |self| ... }
          
          click to toggle source
          
        
        
        Call preprocess on each session. If block given and that block retuns false then we exit the processing
# File lib/net/ssh/connection/event_loop.rb, line 48 def ev_preprocess(&block) return false if block_given? && !yield(self) @sessions.each(&:ev_preprocess) return false if block_given? && !yield(self) return true end
          ev_select_and_postprocess(wait)
          
          click to toggle source
          
        
        
        # File lib/net/ssh/connection/event_loop.rb, line 55 def ev_select_and_postprocess(wait) owners = {} r = [] w = [] minwait = nil @sessions.each do |session| sr,sw,actwait = session.ev_do_calculate_rw_wait(wait) minwait = actwait if actwait && (minwait.nil? || actwait < minwait) r.push(*sr) w.push(*sw) sr.each { |ri| owners[ri] = session } sw.each { |wi| owners[wi] = session } end readers, writers, = IO.select(r, w, nil, minwait) fired_sessions = {} if readers readers.each do |reader| session = owners[reader] (fired_sessions[session] ||= { r: [],w: [] })[:r] << reader end end if writers writers.each do |writer| session = owners[writer] (fired_sessions[session] ||= { r: [],w: [] })[:w] << writer end end fired_sessions.each do |s,rw| s.ev_do_handle_events(rw[:r],rw[:w]) end @sessions.each { |s| s.ev_do_postprocess(fired_sessions.key?(s)) } true end
          process(wait = nil, &block)
          
          click to toggle source
          
        
        
        process until timeout if a block is given a session will be removed from loop if block returns false for that session
# File lib/net/ssh/connection/event_loop.rb, line 28 def process(wait = nil, &block) return false unless ev_preprocess(&block) ev_select_and_postprocess(wait) end
          process_only(session, wait = nil)
          
          click to toggle source
          
        
        
        process the event loop but only for the sepcified session
# File lib/net/ssh/connection/event_loop.rb, line 35 def process_only(session, wait = nil) orig_sessions = @sessions begin @sessions = [session] return false unless ev_preprocess ev_select_and_postprocess(wait) ensure @sessions = orig_sessions end end
          register(session)
          
          click to toggle source
          
        
        
        # File lib/net/ssh/connection/event_loop.rb, line 21 def register(session) @sessions << session end