Class: DeepConnect::DeepFork
Instance Attribute Summary collapse
-
#peer_deep_space ⇒ Object
readonly
Returns the value of attribute peer_deep_space.
-
#peer_pid ⇒ Object
readonly
Returns the value of attribute peer_pid.
Instance Method Summary collapse
- #connect(df2, peer_pid) ⇒ Object
-
#initialize(dc1, service = 0, except_closing_io = [STDIN, STDOUT, STDERR], &block) ⇒ DeepFork
constructor
A new instance of DeepFork.
Constructor Details
#initialize(dc1, service = 0, except_closing_io = [STDIN, STDOUT, STDERR], &block) ⇒ DeepFork
Returns a new instance of DeepFork.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/deep-connect/deep-fork.rb', line 17 def initialize(dc1, service = 0, except_closing_io = [STDIN, STDOUT, STDERR], &block) @dc1 = dc1 @peer_pid = nil @peer_deep_space = nil @peer_deep_space_mx = Mutex.new @peer_deep_space_cv = ConditionVariable.new exp = "DeepFork_#{format("%0xd", self.object_id)}" @dc1.export(exp, self) @peer_pid = Process.fork { ionos = except_closing_io.collect{|io| io.fileno} ObjectSpace.each_object(IO) do |io| begin unless ionos.include?(io.fileno) io.close end rescue end end dc2 = DeepConnect.start(service) ds2 = dc2.open_deepspace("localhost", @dc1.local_id) df1 = ds2.import(exp) df1.connect(self, $$) block.call(dc2, ds2) } @peer_deep_space_mx.synchronize do until @peer_deep_space @peer_deep_space_cv.wait(@peer_deep_space_mx) end end self end |
Instance Attribute Details
#peer_deep_space ⇒ Object (readonly)
Returns the value of attribute peer_deep_space.
54 55 56 |
# File 'lib/deep-connect/deep-fork.rb', line 54 def peer_deep_space @peer_deep_space end |
#peer_pid ⇒ Object (readonly)
Returns the value of attribute peer_pid.
55 56 57 |
# File 'lib/deep-connect/deep-fork.rb', line 55 def peer_pid @peer_pid end |
Instance Method Details
#connect(df2, peer_pid) ⇒ Object
57 58 59 60 61 62 63 64 |
# File 'lib/deep-connect/deep-fork.rb', line 57 def connect(df2, peer_pid) @peer_deep_space_mx.synchronize do if @peer_pid == peer_pid @peer_deep_space = df2.deep_space @peer_deep_space_cv.signal end end end |