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