aboutsummaryrefslogtreecommitdiffstats
path: root/lib/drb/gw.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/drb/gw.rb')
-rw-r--r--lib/drb/gw.rb74
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
+