class Pwrake::NBIO::Writer
Attributes
host[RW]
io[R]
Public Class Methods
new(selector, io)
click to toggle source
# File lib/pwrake/nbio.rb, line 150 def initialize(selector, io) @selector = selector @io = io @waiter = [] @pool = [] end
Public Instance Methods
call()
click to toggle source
call from Selector
# File lib/pwrake/nbio.rb, line 160 def call w = @waiter @waiter = [] w.each{|f| f.resume} ensure @selector.delete_writer(self) if @waiter.empty? end
error(e)
click to toggle source
# File lib/pwrake/nbio.rb, line 182 def error(e) @closed = true raise e end
flush()
click to toggle source
# File lib/pwrake/nbio.rb, line 200 def flush until @pool.empty? len = _write(@pool[0]) pop(len) end end
halt()
click to toggle source
# File lib/pwrake/nbio.rb, line 175 def halt @halting = true call ensure @halting = false end
put_line(line, ch=nil)
click to toggle source
call from Fiber context
# File lib/pwrake/nbio.rb, line 169 def put_line(line, ch=nil) line = line.chomp line = "#{ch}:#{line}" if ch write(line+"\n") end
puts(s)
click to toggle source
# File lib/pwrake/nbio.rb, line 196 def puts(s) write(s+"\n") end
select_io()
click to toggle source
# File lib/pwrake/nbio.rb, line 207 def select_io @selector.add_writer(self) if @waiter.empty? @waiter.push(Fiber.current) Fiber.yield end
write(buf, buffered=false)
click to toggle source
from Bartender
# File lib/pwrake/nbio.rb, line 189 def write(buf, buffered=false) push(buf) flush unless buffered end
Also aliased as: print
Private Instance Methods
_write(buf)
click to toggle source
# File lib/pwrake/nbio.rb, line 214 def _write(buf) return @io.write_nonblock(buf) rescue IO::WaitWritable return nil if @halting select_io retry end
pop(size)
click to toggle source
# File lib/pwrake/nbio.rb, line 228 def pop(size) return if size < 0 raise if @pool[0].bytesize < size if @pool[0].bytesize == size @pool.shift else unless @pool[0].encoding == Encoding::BINARY @pool[0] = @pool[0].dup.force_encoding(Encoding::BINARY) end @pool[0].slice!(0...size) end end
push(string)
click to toggle source
# File lib/pwrake/nbio.rb, line 222 def push(string) if string.bytesize > 0 @pool << string end end