class MultiProcess::Receiver

Can handle input from multiple processes and run custom actions on event and output.

Public Instance Methods

message(process, name, message) click to toggle source

Send a custom messages.

# File lib/multi_process/receiver.rb, line 31
def message(process, name, message)
  received process, name, message
end
pipe(process, name) click to toggle source

Request a new pipe writer for given process and name.

@param process [ Process ] Process requesting pipe. @param name [ Symbol ] Name associated to pipe e.g.

`:out` or `:err`.
# File lib/multi_process/receiver.rb, line 12
def pipe(process, name)
  reader, writer = IO.pipe

  Loop.instance.watch(reader) do |action, monitor|
    case action
    when :registered
      connected(process, name)
    when :ready
      received(process, name, read(monitor.io))
    when :eof
      removed(process, name)
    end
  end

  writer
end

Protected Instance Methods

connected(_process, _name) click to toggle source

Called after new pipe for process and name was created.

# File lib/multi_process/receiver.rb, line 63
def connected(_process, _name)
end
read(reader) click to toggle source

Read content from pipe. Can be used to provide custom reading like reading lines instead of byte ranges.

Should be non blocking.

# File lib/multi_process/receiver.rb, line 51
def read(reader)
  reader.read_nonblock 4096
end
received(_process, _name, _message) click to toggle source

Will be called when content is received for given process and name.

Must be overridden by subclass.

# File lib/multi_process/receiver.rb, line 42
def received(_process, _name, _message)
  fail NotImplementedError.new 'Subclass responsibility.'
end
removed(_process, _name) click to toggle source

Called after pipe for process and name was removed because it reached EOF.

# File lib/multi_process/receiver.rb, line 58
def removed(_process, _name)
end