Class: Pwrake::NBIO::Handler

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

Overview


Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(reader, writer, hostname = nil) ⇒ Handler

Returns a new instance of Handler.



454
455
456
457
458
459
# File 'lib/pwrake/nbio.rb', line 454

def initialize(reader,writer,hostname=nil)
  @writer = writer
  @reader = reader
  @host = hostname
  @exited = false
end

Instance Attribute Details

#hostObject (readonly)

Returns the value of attribute host.



460
461
462
# File 'lib/pwrake/nbio.rb', line 460

def host
  @host
end

#readerObject (readonly)

Returns the value of attribute reader.



460
461
462
# File 'lib/pwrake/nbio.rb', line 460

def reader
  @reader
end

#writerObject (readonly)

Returns the value of attribute writer.



460
461
462
# File 'lib/pwrake/nbio.rb', line 460

def writer
  @writer
end

Class Method Details

.exit(hdl_set) ⇒ Object



520
521
522
523
524
525
526
# File 'lib/pwrake/nbio.rb', line 520

def self.exit(hdl_set)
  hdl_set.each do |hdl|
    Fiber.new do
      hdl.exit
    end.resume
  end
end

.kill(hdl_set, sig) ⇒ Object



512
513
514
515
516
517
518
# File 'lib/pwrake/nbio.rb', line 512

def self.kill(hdl_set,sig)
  hdl_set.each do |hdl|
    Fiber.new do
      hdl.put_kill(sig)
    end.resume
  end
end

Instance Method Details

#exitObject



479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
# File 'lib/pwrake/nbio.rb', line 479

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"
  #return if iow.closed?
  @writer.put_line "exit"
  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
rescue Errno::EPIPE => e
  Log.error "Errno::EPIPE in #{self.class}.exit iow=#{iow.inspect}\n"+
    e.backtrace.join("\n") if defined? Log
end

#get_lineObject



462
463
464
# File 'lib/pwrake/nbio.rb', line 462

def get_line
  @reader.get_line
end

#haltObject



507
508
509
510
# File 'lib/pwrake/nbio.rb', line 507

def halt
  @writer.halt
  @reader.halt
end

#put_exitObject



475
476
477
# File 'lib/pwrake/nbio.rb', line 475

def put_exit
  @writer.put_line "exit"
end

#put_kill(sig = "INT") ⇒ Object



470
471
472
473
# File 'lib/pwrake/nbio.rb', line 470

def put_kill(sig="INT")
  @writer.io.write("kill:#{sig}\n")
  @writer.io.flush
end

#put_line(s) ⇒ Object



466
467
468
# File 'lib/pwrake/nbio.rb', line 466

def put_line(s)
  @writer.put_line(s)
end