Class: DRb::ExtServManager
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
| Instance Chain: 
          self,
          MonitorMixin,
           DRbUndumped | |
| Inherits: | Object | 
| Defined in: | lib/drb/extservm.rb | 
Class Attribute Summary
- .command rw
- .command=(cmd) rw
Class Method Summary
- .new ⇒ ExtServManager constructor
Instance Attribute Summary
- #uri rw
Instance Method Summary
- 
    
      #regist(name, ro)  
    
    Alias for #register. 
- #register(name, ro) (also: #regist)
- #service(name)
- 
    
      #unregist(name)  
    
    Alias for #unregister. 
- #unregister(name) (also: #unregist)
- #invoke_service(name) private
- #invoke_service_command(name, command) private
- #invoke_thread private
DRbUndumped - Included
Constructor Details
    .new  ⇒ ExtServManager 
  
# File 'lib/drb/extservm.rb', line 25
def initialize super() @cond = new_cond @servers = {} @waiting = [] @queue = Thread::Queue.new @thread = invoke_thread @uri = nil end
Class Attribute Details
.command (rw)
[ GitHub ]# File 'lib/drb/extservm.rb', line 17
def self.command @@command end
.command=(cmd) (rw)
[ GitHub ]# File 'lib/drb/extservm.rb', line 21
def self.command=(cmd) @@command = cmd end
Instance Attribute Details
#uri (rw)
[ GitHub ]# File 'lib/drb/extservm.rb', line 34
attr_accessor :uri
Instance Method Details
#invoke_service(name) (private)
[ GitHub ]# File 'lib/drb/extservm.rb', line 72
def invoke_service(name) @queue.push(name) end
#invoke_service_command(name, command) (private)
[ GitHub ]# File 'lib/drb/extservm.rb', line 76
def invoke_service_command(name, command) raise "invalid command. name: #{name}" unless command synchronize do return if @servers.include?(name) @servers[name] = false end uri = @uri || DRb.uri if command.respond_to? :to_ary command = command.to_ary + [uri, name] pid = spawn(*command) else pid = spawn("#{command} #{uri} #{name}") end th = Process.detach(pid) th[:drb_service] = name th end
#invoke_thread (private)
[ GitHub ]# File 'lib/drb/extservm.rb', line 64
def invoke_thread Thread.new do while name = @queue.pop invoke_service_command(name, @@command[name]) end end end
#regist(name, ro)
Alias for #register.
# File 'lib/drb/extservm.rb', line 54
alias regist register
#register(name, ro) Also known as: #regist
[ GitHub ]# File 'lib/drb/extservm.rb', line 47
def register(name, ro) synchronize do @servers[name] = ro @cond.signal end self end
#service(name)
[ GitHub ]# File 'lib/drb/extservm.rb', line 36
def service(name) synchronize do while true server = @servers[name] return server if server && server.alive? # server may be `false' invoke_service(name) @cond.wait end end end
#unregist(name)
Alias for #unregister.
# File 'lib/drb/extservm.rb', line 61
alias unregist unregister
#unregister(name) Also known as: #unregist
[ GitHub ]# File 'lib/drb/extservm.rb', line 56
def unregister(name) synchronize do @servers.delete(name) end end