Imported File#ftype spec from rubyspecs.
[rbx.git] / lib / drb / extserv.rb
blobaf522505185081033256e1ffafd5bf0213e26ae7
1 =begin
2  external service
3         Copyright (c) 2000,2002 Masatoshi SEKI 
4 =end
6 require 'drb/drb'
7 require 'monitor'
9 module DRb
10   class ExtServ
11     include MonitorMixin
12     include DRbUndumped
14     def initialize(there, name, server=nil)
15       super()
16       @server = server || DRb::primary_server
17       @name = name
18       ro = DRbObject.new(nil, there)
19       synchronize do
20         @invoker = ro.regist(name, DRbObject.new(self, @server.uri))
21       end
22     end
23     attr_reader :server
25     def front
26       DRbObject.new(nil, @server.uri)
27     end
29     def stop_service
30       synchronize do
31         @invoker.unregist(@name)
32         server = @server
33         @server = nil
34         server.stop_service
35         true
36       end
37     end
39     def alive?
40       @server ? @server.alive? : false
41     end
42   end
43 end
45 if __FILE__ == $0
46   class Foo
47     include DRbUndumped
49     def initialize(str)
50       @str = str
51     end
53     def hello(it)
54       "#{it}: #{self}"
55     end
57     def to_s
58       @str
59     end
60   end
62   cmd = ARGV.shift
63   case cmd
64   when 'itest1', 'itest2'
65     front = Foo.new(cmd)
66     manager = DRb::DRbServer.new(nil, front)
67     es = DRb::ExtServ.new(ARGV.shift, ARGV.shift, manager)
68     es.server.thread.join
69   end
70 end