Class: RIO::Cmd::ToOutput

Inherits:
To show all
Defined in:
lib/rio/fibpipe.rb

Direct Known Subclasses

ToProc, ToStdout

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

#_create_input_fiberObject



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

Returns:

  • (Boolean)


101
# File 'lib/rio/fibpipe.rb', line 101

def dest?() @is_dest end

#duplex?Boolean

Returns:

  • (Boolean)


102
# File 'lib/rio/fibpipe.rb', line 102

def duplex?() @is_duplex end

#process_loopObject



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

#put(rec) ⇒ Object



103
104
105
# File 'lib/rio/fibpipe.rb', line 103

def put(rec)
  data.out.write(rec)
end