mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
81 lines
1.3 KiB
Ruby
81 lines
1.3 KiB
Ruby
|
=begin
|
||
|
dRuby sample
|
||
|
Copyright (c) 2000 Masatoshi SEKI
|
||
|
|
||
|
= How to play
|
||
|
|
||
|
* Terminal 1
|
||
|
|
||
|
% ruby -I. extserv_test.rb server
|
||
|
druby://yourhost:12345
|
||
|
|
||
|
* Terminal 2
|
||
|
|
||
|
% ruby -I. extserv_test.rb druby://yourhost:12345
|
||
|
...
|
||
|
|
||
|
=end
|
||
|
|
||
|
require 'drb/drb'
|
||
|
|
||
|
def ARGV.shift
|
||
|
it = super()
|
||
|
raise "usage:\nserver: #{$0} server [<uri>]\nclient: #{$0} [quit] <uri>" unless it
|
||
|
it
|
||
|
end
|
||
|
|
||
|
class Foo
|
||
|
include DRbUndumped
|
||
|
|
||
|
def initialize(str)
|
||
|
@str = str
|
||
|
end
|
||
|
|
||
|
def hello(it)
|
||
|
"#{it}: #{self}"
|
||
|
end
|
||
|
|
||
|
def to_s
|
||
|
@str
|
||
|
end
|
||
|
end
|
||
|
|
||
|
cmd = ARGV.shift
|
||
|
case cmd
|
||
|
when 'itest1', 'itest2'
|
||
|
require 'drb/extserv'
|
||
|
|
||
|
front = Foo.new(cmd)
|
||
|
server = DRb::DRbServer.new(nil, front)
|
||
|
es = DRb::ExtServ.new(ARGV.shift, ARGV.shift, server)
|
||
|
server.thread.join
|
||
|
|
||
|
when 'server'
|
||
|
require 'drb/extservm'
|
||
|
|
||
|
DRb::ExtServManager.command['itest1'] = "ruby -I. #{$0} itest1"
|
||
|
DRb::ExtServManager.command['itest2'] = "ruby -I. #{$0} itest2"
|
||
|
|
||
|
s = DRb::ExtServManager.new
|
||
|
DRb.start_service(ARGV.shift, s)
|
||
|
puts DRb.uri
|
||
|
DRb.thread.join
|
||
|
|
||
|
|
||
|
else
|
||
|
uri = (cmd == 'quit') ? ARGV.shift : cmd
|
||
|
|
||
|
DRb.start_service
|
||
|
s = DRbObject.new(nil, uri)
|
||
|
t1 = s.service('itest1').front
|
||
|
puts t1
|
||
|
t2 = s.service('itest2').front
|
||
|
puts t2
|
||
|
puts t1.hello(t2)
|
||
|
if (cmd == 'quit')
|
||
|
s.service('itest1').stop_service
|
||
|
s.service('itest2').stop_service
|
||
|
end
|
||
|
end
|
||
|
|