# class DRb::ExtServManager

### Attributes

uri[RW]

### Public Class Methods

command() click to toggle source

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

command=(cmd) click to toggle source

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

new() click to toggle source
Calls superclass method `MonitorMixin::new`

    # 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

### Public Instance Methods

regist(name, ro)
Alias for: register
register(name, ro) click to toggle source

    # File lib/drb/extservm.rb, line 47
    def register(name, ro)
      synchronize do
        @servers[name] = ro
        @cond.signal
      end
      self
    end

Also aliased as: regist
service(name) click to toggle source

    # 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
unregister(name) click to toggle source

    # File lib/drb/extservm.rb, line 56
    def unregister(name)
      synchronize do
        @servers.delete(name)
      end
    end

Also aliased as: unregist

### Private Instance Methods

invoke_service(name) click to toggle source

    # File lib/drb/extservm.rb, line 72
    def invoke_service(name)
      @queue.push(name)
    end

invoke_service_command(name, command) click to toggle source

    # 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() click to toggle source

    # 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