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.



120
121
122
123
124
125
# File 'lib/pwrake/nbio.rb', line 120

def initialize(selector, io)
  @selector = selector
  @io = io
  @waiter = []
  @pool = []
end

Instance Attribute Details

#ioObject (readonly)

Returns the value of attribute io.



126
127
128
# File 'lib/pwrake/nbio.rb', line 126

def io
  @io
end

Instance Method Details

#callObject

call from Selector



129
130
131
132
133
134
135
# File 'lib/pwrake/nbio.rb', line 129

def call
  w = @waiter
  @waiter = []
  w.each{|f| f.resume}
ensure
  @selector.delete_writer(self) if @waiter.empty?
end

#error(e) ⇒ Object



151
152
153
154
# File 'lib/pwrake/nbio.rb', line 151

def error(e)
  @closed = true
  raise e
end

#flushObject



163
164
165
166
167
168
# File 'lib/pwrake/nbio.rb', line 163

def flush
  until @pool.empty?
    len = _write(@pool[0])
    pop(len)
  end
end

#haltObject



144
145
146
147
148
149
# File 'lib/pwrake/nbio.rb', line 144

def halt
  @halting = true
  call
ensure
  @halting = false
end

#put_line(line, ch = nil) ⇒ Object

call from Fiber context



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

def put_line(line, ch=nil)
  line = line.chomp
  line = "#{ch}:#{line}" if ch
  write(line+"\n")
end

#select_ioObject



170
171
172
173
174
# File 'lib/pwrake/nbio.rb', line 170

def select_io
  @selector.add_writer(self) if @waiter.empty?
  @waiter.push(Fiber.current)
  Fiber.yield
end

#write(buf, buffered = false) ⇒ Object

from Bartender



158
159
160
161
# File 'lib/pwrake/nbio.rb', line 158

def write(buf, buffered=false)
  push(buf)
  flush unless buffered
end