class Pwrake::NBIO::Handler

Attributes

host[R]
reader[R]
writer[R]

Public Class Methods

exit(hdl_set) click to toggle source
# File lib/pwrake/nbio.rb, line 545
def self.exit(hdl_set)
  hdl_set.each do |hdl|
    Fiber.new do
      hdl.exit
    end.resume
  end
end
kill(hdl_set,sig) click to toggle source
# File lib/pwrake/nbio.rb, line 537
def self.kill(hdl_set,sig)
  hdl_set.each do |hdl|
    Fiber.new do
      hdl.put_kill(sig)
    end.resume
  end
end
new(reader,writer,hostname=nil) click to toggle source
# File lib/pwrake/nbio.rb, line 471
def initialize(reader,writer,hostname=nil)
  @writer = writer
  @reader = reader
  @host = hostname
  @reader.host = @host
  @writer.host = @host
  @exited = false
end

Public Instance Methods

exit() click to toggle source
# File lib/pwrake/nbio.rb, line 498
def exit
  iow = @writer.io
  Log.debug "Handler#exit iow=#{iow.inspect}" if defined? Log
  if @exited
    Log.debug "Handler<##{object_id}#exit multiple called" if defined? Log
    bt = caller.join("\n ")
    Log.debug "Handler#exit bt=\n #{bt}" if defined? Log
    return
  end
  @exited = true
  exit_msg = "exited"
  begin
    @writer.put_line "exit"
  rescue Errno::EPIPE => e
    m = "#{e} in #{self.class}.exit iow=#{iow.inspect}"
    if defined? Log
      Log.warn m
    else
      $stderr.puts m
    end
    return
  end
  Log.debug "Handler#exit: end: @writer.put_line \"exit\"" if defined? Log
  #
  if @reader.class == Reader # MultiReader not work
    while line = @reader.get_line
      # here might receive "retire:0" from branch...
      line.chomp!
      Log.debug "Handler#exit: #{line} host=#{@host}" if defined? Log
      return if line == exit_msg
    end
  end
end
get_line() click to toggle source
# File lib/pwrake/nbio.rb, line 481
def get_line
  @reader.get_line
end
halt() click to toggle source
# File lib/pwrake/nbio.rb, line 532
def halt
  @writer.halt
  @reader.halt
end
put_exit() click to toggle source
# File lib/pwrake/nbio.rb, line 494
def put_exit
  @writer.put_line "exit"
end
put_kill(sig="INT") click to toggle source
# File lib/pwrake/nbio.rb, line 489
def put_kill(sig="INT")
  @writer.io.write("kill:#{sig}\n")
  @writer.io.flush
end
put_line(s) click to toggle source
# File lib/pwrake/nbio.rb, line 485
def put_line(s)
  @writer.put_line(s)
end