Class: Pwrake::NBIO::Writer
- Inherits:
-
Object
- Object
- Pwrake::NBIO::Writer
- Defined in:
- lib/pwrake/nbio.rb
Overview
Instance Attribute Summary collapse
-
#io ⇒ Object
readonly
Returns the value of attribute io.
Instance Method Summary collapse
-
#call ⇒ Object
call from Selector.
- #error(e) ⇒ Object
- #flush ⇒ Object
- #halt ⇒ Object
-
#initialize(selector, io) ⇒ Writer
constructor
A new instance of Writer.
-
#put_line(line, ch = nil) ⇒ Object
call from Fiber context.
- #puts(s) ⇒ Object
- #select_io ⇒ Object
-
#write(buf, buffered = false) ⇒ Object
(also: #print)
from Bartender.
Constructor Details
#initialize(selector, io) ⇒ Writer
Returns a new instance of Writer.
134 135 136 137 138 139 |
# File 'lib/pwrake/nbio.rb', line 134 def initialize(selector, io) @selector = selector @io = io @waiter = [] @pool = [] end |
Instance Attribute Details
#io ⇒ Object (readonly)
Returns the value of attribute io.
140 141 142 |
# File 'lib/pwrake/nbio.rb', line 140 def io @io end |
Instance Method Details
#call ⇒ Object
call from Selector
143 144 145 146 147 148 149 |
# File 'lib/pwrake/nbio.rb', line 143 def call w = @waiter @waiter = [] w.each{|f| f.resume} ensure @selector.delete_writer(self) if @waiter.empty? end |
#error(e) ⇒ Object
165 166 167 168 |
# File 'lib/pwrake/nbio.rb', line 165 def error(e) @closed = true raise e end |
#flush ⇒ Object
183 184 185 186 187 188 |
# File 'lib/pwrake/nbio.rb', line 183 def flush until @pool.empty? len = _write(@pool[0]) pop(len) end end |
#halt ⇒ Object
158 159 160 161 162 163 |
# File 'lib/pwrake/nbio.rb', line 158 def halt @halting = true call ensure @halting = false end |
#put_line(line, ch = nil) ⇒ Object
call from Fiber context
152 153 154 155 156 |
# File 'lib/pwrake/nbio.rb', line 152 def put_line(line, ch=nil) line = line.chomp line = "#{ch}:#{line}" if ch write(line+"\n") end |
#puts(s) ⇒ Object
179 180 181 |
# File 'lib/pwrake/nbio.rb', line 179 def puts(s) write(s+"\n") end |
#select_io ⇒ Object
190 191 192 193 194 |
# File 'lib/pwrake/nbio.rb', line 190 def select_io @selector.add_writer(self) if @waiter.empty? @waiter.push(Fiber.current) Fiber.yield end |
#write(buf, buffered = false) ⇒ Object Also known as: print
from Bartender
172 173 174 175 |
# File 'lib/pwrake/nbio.rb', line 172 def write(buf, buffered=false) push(buf) flush unless buffered end |