diff options
Diffstat (limited to 'lib/drb/gw.rb')
-rw-r--r-- | lib/drb/gw.rb | 74 |
1 files changed, 68 insertions, 6 deletions
diff --git a/lib/drb/gw.rb b/lib/drb/gw.rb index 012a2b0a11..b7a5f5383f 100644 --- a/lib/drb/gw.rb +++ b/lib/drb/gw.rb @@ -5,9 +5,7 @@ module DRb class GWIdConv < DRbIdConv def to_obj(ref) if Array === ref && ref[0] == :DRbObject - it = DRbObject.new(nil) - it.reinit(ref[1], ref[2]) - return it + return DRbObject.new_with(ref[1], ref[2]) end super(ref) end @@ -40,9 +38,7 @@ module DRb return ref ? DRb.to_obj(ref) : DRb.front end - it = self.new(nil) - it.reinit(DRb.uri, [:DRbObject, uri, ref]) - it + self.new_with(DRb.uri, [:DRbObject, uri, ref]) end def _dump(lv) @@ -58,3 +54,69 @@ module DRb end end end + +=begin +DRb.install_id_conv(DRb::GWIdConv.new) + +front = DRb::GW.new + +s1 = DRb::DRbServer.new('drbunix:/tmp/gw_b_a', front) +s2 = DRb::DRbServer.new('drbunix:/tmp/gw_b_c', front) + +s1.thread.join +s2.thread.join +=end + +=begin +# foo.rb + +require 'drb/drb' + +class Foo + include DRbUndumped + def initialize(name, peer=nil) + @name = name + @peer = peer + end + + def ping(obj) + puts "#{@name}: ping: #{obj.inspect}" + @peer.ping(self) if @peer + end +end +=end + +=begin +# gw_a.rb +require 'drb/unix' +require 'foo' + +obj = Foo.new('a') +DRb.start_service("drbunix:/tmp/gw_a", obj) + +robj = DRbObject.new_with_uri('drbunix:/tmp/gw_b_a') +robj[:a] = obj + +DRb.thread.join +=end + +=begin +# gw_c.rb +require 'drb/unix' +require 'foo' + +foo = Foo.new('c', nil) + +DRb.start_service("drbunix:/tmp/gw_c", nil) + +robj = DRbObject.new_with_uri("drbunix:/tmp/gw_b_c") + +puts "c->b" +a = robj[:a] +sleep 2 + +a.ping(foo) + +DRb.thread.join +=end + |