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