Class DRb::ExtServManager
In: lib/drb/extservm.rb
Parent: Object

Methods

Included Modules

DRbUndumped

Attributes

uri  [RW] 

Public Class methods

[Source]

    # File lib/drb/extservm.rb, line 15
15:     def self.command
16:       @@command
17:     end

[Source]

    # File lib/drb/extservm.rb, line 19
19:     def self.command=(cmd)
20:       @@command = cmd
21:     end

[Source]

    # 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

Public Instance methods

[Source]

    # 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

[Source]

    # 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

[Source]

    # File lib/drb/extservm.rb, line 59
59:     def unregist(name)
60:       Thread.exclusive do
61:         @servers.delete(name)
62:       end
63:     end

Private Instance methods

[Source]

    # 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

[Source]

    # 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

[Source]

    # File lib/drb/extservm.rb, line 66
66:     def invoke_thread
67:       Thread.new do
68:         while true
69:           name = @queue.pop
70:           invoke_service_command(name, @@command[name])
71:         end
72:       end
73:     end

[Validate]