Class: Pwrake::NBIO::Selector

Inherits:
Object
  • Object
show all
Defined in:
lib/pwrake/nbio.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeSelector

Returns a new instance of Selector.



11
12
13
14
15
16
# File 'lib/pwrake/nbio.rb', line 11

def initialize
  @reader = {}
  @writer = {}
  @hb_time = {}
  @running = false
end

Instance Attribute Details

#readerObject (readonly)

Returns the value of attribute reader.



18
19
20
# File 'lib/pwrake/nbio.rb', line 18

def reader
  @reader
end

#writerObject (readonly)

Returns the value of attribute writer.



18
19
20
# File 'lib/pwrake/nbio.rb', line 18

def writer
  @writer
end

Instance Method Details

#add_reader(hdl) ⇒ Object



20
21
22
23
# File 'lib/pwrake/nbio.rb', line 20

def add_reader(hdl)
  @reader[hdl.io] = hdl
  heartbeat(hdl.io) if hdl.timeout
end

#add_writer(hdl) ⇒ Object



30
31
32
# File 'lib/pwrake/nbio.rb', line 30

def add_writer(hdl)
  @writer[hdl.io] = hdl
end

#delete_heartbeat(io) ⇒ Object



60
61
62
63
# File 'lib/pwrake/nbio.rb', line 60

def delete_heartbeat(io)
  @hb_time.delete(io)
  @hb_earliest = @hb_time.values.min
end

#delete_reader(hdl) ⇒ Object



25
26
27
28
# File 'lib/pwrake/nbio.rb', line 25

def delete_reader(hdl)
  @reader.delete(hdl.io)
  delete_heartbeat(hdl.io)
end

#delete_writer(hdl) ⇒ Object



34
35
36
# File 'lib/pwrake/nbio.rb', line 34

def delete_writer(hdl)
  @writer.delete(hdl.io)
end

#empty?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/pwrake/nbio.rb', line 38

def empty?
  @reader.empty? && @writer.empty?
end

#get_host(io) ⇒ Object

used to print an error message



49
50
51
52
# File 'lib/pwrake/nbio.rb', line 49

def get_host(io)
  hdl = @reader[io] || @writer[io]
  hdl.respond_to?(:host) ? hdl.host : nil
end

#haltObject



42
43
44
45
46
# File 'lib/pwrake/nbio.rb', line 42

def halt
  @running = false
  @writer.each_value{|w| w.halt}
  @reader.each_value{|r| r.halt}
end

#heartbeat(io) ⇒ Object

called when IO start and receive heartbeat



55
56
57
58
# File 'lib/pwrake/nbio.rb', line 55

def heartbeat(io)
  @hb_time[io] = Time.now
  @hb_earliest = @hb_time.values.min
end

#run(timeout = nil) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/pwrake/nbio.rb', line 65

def run(timeout=nil)
  @running = true
  while @running && !empty?
    if $debug
      Log.debug "Selector#run: "+caller[0..1].join(", ")+
        " @reader.size=#{@reader.size} @writer.size=#{@writer.size}"
      $stderr.puts "Selector#run: "+caller[0]
    end
    run_select(timeout)
  end
ensure
  @running = false
end