1=begin 2 dRuby sample 3 Copyright (c) 2000 Masatoshi SEKI 4 5= How to play 6 7* Terminal 1 8 9 % ruby -I. extserv_test.rb server 10 druby://yourhost:12345 11 12* Terminal 2 13 14 % ruby -I. extserv_test.rb druby://yourhost:12345 15 ... 16 17=end 18 19require 'drb/drb' 20 21def ARGV.shift 22 it = super() 23 raise "usage:\nserver: #{$0} server [<uri>]\nclient: #{$0} [quit] <uri>" unless it 24 it 25end 26 27class Foo 28 include DRbUndumped 29 30 def initialize(str) 31 @str = str 32 end 33 34 def hello(it) 35 "#{it}: #{self}" 36 end 37 38 def to_s 39 @str 40 end 41end 42 43cmd = ARGV.shift 44case cmd 45when 'itest1', 'itest2' 46 require 'drb/extserv' 47 48 front = Foo.new(cmd) 49 server = DRb::DRbServer.new(nil, front) 50 es = DRb::ExtServ.new(ARGV.shift, ARGV.shift, server) 51 server.thread.join 52 53when 'server' 54 require 'drb/extservm' 55 56 DRb::ExtServManager.command['itest1'] = "ruby -I. #{$0} itest1" 57 DRb::ExtServManager.command['itest2'] = "ruby -I. #{$0} itest2" 58 59 s = DRb::ExtServManager.new 60 DRb.start_service(ARGV.shift, s) 61 puts DRb.uri 62 DRb.thread.join 63 64 65else 66 uri = (cmd == 'quit') ? ARGV.shift : cmd 67 68 DRb.start_service 69 s = DRbObject.new(nil, uri) 70 t1 = s.service('itest1').front 71 puts t1 72 t2 = s.service('itest2').front 73 puts t2 74 puts t1.hello(t2) 75 if (cmd == 'quit') 76 s.service('itest1').stop_service 77 s.service('itest2').stop_service 78 end 79end 80 81