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
hydra-0.22.0 lib/hydra/pipe.rb
sskirby-hydra-0.21.0 lib/hydra/pipe.rb
hydra-0.21.0 lib/hydra/pipe.rb
hydra-0.20.0 lib/hydra/pipe.rb
bellmyer-hydra-0.20.12 lib/hydra/pipe.rb
bellmyer-hydra-0.20.11 lib/hydra/pipe.rb
bellmyer-hydra-0.20.10 lib/hydra/pipe.rb
bellmyer-hydra-0.20.9 lib/hydra/pipe.rb
hydra-0.19.4 lib/hydra/pipe.rb
hydra-0.19.3 lib/hydra/pipe.rb
hydra-0.19.2 lib/hydra/pipe.rb
hydra-0.19.1 lib/hydra/pipe.rb
hydra-0.19.0 lib/hydra/pipe.rb
hydra-0.18.0 lib/hydra/pipe.rb
sskirby-hydra-0.17.1 lib/hydra/pipe.rb
sskirby-hydra-0.16.10 lib/hydra/pipe.rb
hydra-0.17.0 lib/hydra/pipe.rb
sskirby-hydra-0.16.9 lib/hydra/pipe.rb
hydra-0.16.7 lib/hydra/pipe.rb
hydra-0.16.6 lib/hydra/pipe.rb