| Class | DRb::ExtServManager |
| In: |
lib/drb/extservm.rb
|
| Parent: | Object |
| uri | [RW] |
# File lib/drb/extservm.rb, line 23
23: def initialize
24: @servers = {}
25: @waiting = []
26: @queue = Queue.new
27: @thread = invoke_thread
28: @uri = nil
29: end
# File lib/drb/extservm.rb, line 43
43: def regist(name, ro)
44: ary = nil
45: Thread.exclusive do
46: @servers[name] = ro
47: ary = @waiting
48: @waiting = []
49: end
50: ary.each do |th|
51: begin
52: th.run
53: rescue ThreadError
54: end
55: end
56: self
57: end
# File lib/drb/extservm.rb, line 32
32: def service(name)
33: while true
34: server = nil
35: Thread.exclusive do
36: server = @servers[name] if @servers[name]
37: end
38: return server if server && server.alive?
39: invoke_service(name)
40: end
41: end
# File lib/drb/extservm.rb, line 59
59: def unregist(name)
60: Thread.exclusive do
61: @servers.delete(name)
62: end
63: end
# File lib/drb/extservm.rb, line 75
75: def invoke_service(name)
76: Thread.critical = true
77: @waiting.push Thread.current
78: @queue.push name
79: Thread.stop
80: end
# File lib/drb/extservm.rb, line 82
82: def invoke_service_command(name, command)
83: raise "invalid command. name: #{name}" unless command
84: Thread.exclusive do
85: return if @servers.include?(name)
86: @servers[name] = false
87: end
88: uri = @uri || DRb.uri
89: if RUBY_PLATFORM =~ /mswin32/ && /NT/ =~ ENV["OS"]
90: system(%Q'cmd /c start "ruby" /b #{command} #{uri} #{name}')
91: else
92: system("#{command} #{uri} #{name} &")
93: end
94: end