Class: Pwrake::NBIO::Writer

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

Overview


Instance Attribute Summary collapse

Instance Method Summary collapse

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

#ioObject (readonly)

Returns the value of attribute io.



140
141
142
# File 'lib/pwrake/nbio.rb', line 140

def io
  @io
end

Instance Method Details

#callObject

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

#flushObject



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

#haltObject



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_ioObject



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