Class: RIO::Cmd::ToOutput
- Inherits:
-
To
show all
- Defined in:
- lib/rio/fibpipe.rb
Constant Summary
Constants inherited
from To
RIO::Cmd::To::BUF_LEN
Instance Attribute Summary
Attributes inherited from FibPipe
#fib, #source
Instance Method Summary
collapse
Methods inherited from To
#_fiber_init
Methods inherited from FibPipe
#_fiber_init, #dest_report_data_done, #dest_report_new_data, #dest_wait_for_reader, #fiber_yield, #resume, #source_resume
Constructor Details
#initialize(out, is_dest = true, is_duplex = nil) ⇒ ToOutput
Returns a new instance of ToOutput.
96
97
98
99
100
|
# File 'lib/rio/fibpipe.rb', line 96
def initialize(out,is_dest=true,is_duplex=nil)
super(out)
@is_dest = is_dest
@is_duplex = is_duplex ? is_duplex : !@is_dest
end
|
Instance Method Details
128
129
130
131
132
133
134
135
|
# File 'lib/rio/fibpipe.rb', line 128
def _create_input_fiber
fibname = /[^:]+$/.match(self.class.to_s)[0]
NamedFiber.new(fibname) do |trail|
_fiber_init(trail)
process_loop
dest_wait_for_reader unless dest?
end
end
|
#dest? ⇒ Boolean
101
|
# File 'lib/rio/fibpipe.rb', line 101
def dest?() @is_dest end
|
#duplex? ⇒ Boolean
102
|
# File 'lib/rio/fibpipe.rb', line 102
def duplex?() @is_duplex end
|
#process_loop ⇒ Object
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
# File 'lib/rio/fibpipe.rb', line 106
def process_loop
loop do
begin
rec = data.in.read_nonblock(BUF_LEN)
put(rec)
dest_report_new_data unless dest?
rescue Errno::EWOULDBLOCK
source_resume true
rescue Errno::EINTR
break
rescue EOFError
data.in.close_read
if duplex?
data.out.close_write
else
data.out.close
end
dest_report_data_done unless dest?
break
end
end
end
|
103
104
105
|
# File 'lib/rio/fibpipe.rb', line 103
def put(rec)
data.out.write(rec)
end
|