Sha256: 0a58dfe48d852541c5ab274db687de4d7ae5f6a9845035967367dcb4325685c7

Contents?: true

Size: 1.71 KB

Versions: 63

Compression:

Stored size: 1.71 KB

Contents

require 'hydra/messaging_io'
module Hydra #:nodoc:
  # Read and write between two processes via pipes. For example:
  #   @pipe = Hydra::Pipe.new
  #   @child = Process.fork do
  #     @pipe.identify_as_child
  #     puts "A message from my parent:\n#{@pipe.gets.text}"
  #     @pipe.close
  #   end
  #   @pipe.identify_as_parent
  #   @pipe.write Hydra::Messages::TestMessage.new(:text => "Hello!")
  #   @pipe.close
  #
  # Note that the TestMessage class is only available in tests, and
  # not in Hydra by default.
  #
  #
  # When the process forks, the pipe is copied. When a pipe is
  # identified as a parent or child, it is choosing which ends
  # of the pipe to use.
  #
  # A pipe is actually two pipes:
  #
  #  Parent  == Pipe 1 ==> Child
  #  Parent <== Pipe 2 ==  Child
  #
  # It's like if you had two cardboard tubes and you were using
  # them to drop balls with messages in them between processes.
  # One tube is for sending from parent to child, and the other
  # tube is for sending from child to parent.
  class Pipe
    include Hydra::MessagingIO
    # Creates a new uninitialized pipe pair.
    def initialize
      @child_read, @parent_write = IO.pipe
      @parent_read, @child_write = IO.pipe
    end

    # Identify this side of the pipe as the child.
    def identify_as_child
      @parent_write.close
      @parent_read.close
      @reader = @child_read
      @writer = @child_write
    end

    # Identify this side of the pipe as the parent
    def identify_as_parent
      @child_write.close
      @child_read.close
      @reader = @parent_read
      @writer = @parent_write
    end

    # Output pipe nicely
    def inspect
      "#<#{self.class} @reader=#{@reader.to_s}, @writer=#{@writer.to_s}>"
    end

  end
end

Version data entries

63 entries across 63 versions & 8 rubygems

Version Path
ngauthier-hydra-0.24.0 lib/hydra/pipe.rb
nulogy-hydra-0.26.0 lib/hydra/pipe.rb
arturop-hydra-0.25.0 lib/hydra/pipe.rb
arturop-hydra-0.24.0 lib/hydra/pipe.rb
hydra-0.24.0 lib/hydra/pipe.rb
nulogy-hydra-0.23.2.1 lib/hydra/pipe.rb
justinf-hydra-0.23.8 lib/hydra/pipe.rb
justinf-hydra-0.23.7 lib/hydra/pipe.rb
justinf-hydra-0.23.6 lib/hydra/pipe.rb
justinf-hydra-0.23.5 lib/hydra/pipe.rb
justinf-hydra-0.23.4 lib/hydra/pipe.rb
arturop-hydra-0.23.4 lib/hydra/pipe.rb
sskirby-hydra-0.23.3 lib/hydra/pipe.rb
hydra-0.23.3 lib/hydra/pipe.rb
causes-hydra-0.21.0 lib/hydra/pipe.rb
hydra-0.23.2 lib/hydra/pipe.rb
hydra-0.23.1 lib/hydra/pipe.rb
hydra-0.23.0 lib/hydra/pipe.rb
hydra-0.22.2 lib/hydra/pipe.rb
hydra-0.22.1 lib/hydra/pipe.rb