Spec-Zone.ru › Ruby 2.3

class DRb::DRbObject

Родитель:
Объект

Объект, оборачивающий ссылку на удалённый объект drb.

Вызовы методов к этому объекту перенаправляются на удалённый объект, для которого этот объект является псевдонимом.

Публичные Классовые Методы

_load(s) Показать исходный код
# File lib/drb/drb.rb, line 1053
def self._load(s)
  uri, ref = Marshal.load(s)

  if DRb.here?(uri)
    obj = DRb.to_obj(ref)
    if ((! obj.tainted?) && Thread.current[:drb_untaint])
      Thread.current[:drb_untaint].push(obj)
    end
    return obj
  end

  self.new_with(uri, ref)
end

Распаковывает сериализованный DRbObject.

Если ссылка на объект находится на локальном сервере, то возвращается сам объект. В противном случае создаётся новый DRbObject для работы в качестве псевдонима удалённого объекта.

new(obj, uri=nil) Показать исходный код
# File lib/drb/drb.rb, line 1094
def initialize(obj, uri=nil)
  @uri = nil
  @ref = nil
  if obj.nil?
    return if uri.nil?
    @uri, option = DRbProtocol.uri_option(uri, DRb.config)
    @ref = DRbURIOption.new(option) unless option.nil?
  else
    @uri = uri ? uri : (DRb.uri rescue nil)
    @ref = obj ? DRb.to_id(obj) : nil
  end
end

Создаёт новый псевдоним удалённого объекта.

obj — это (локальный) объект, для которого нужно создать псевдоним. Обычно это nil. uri — URI удалённого объекта, для которого этот псевдоним будет создан.

new_with(uri, ref) Показать исходный код
# File lib/drb/drb.rb, line 1070
def self.new_with(uri, ref)
  it = self.allocate
  it.instance_variable_set(:@uri, uri)
  it.instance_variable_set(:@ref, ref)
  it
end

Создаёт DRb::DRbObject на основе сведений о ссылке на удалённый хост uri и объекте ref.

new_with_uri(uri) Показать исходный код
# File lib/drb/drb.rb, line 1078
def self.new_with_uri(uri)
  self.new(nil, uri)
end

Создаёт новый DRbObject только по URI.

Публичные Методы Экземпляров

__drbref() Показать исходный код
# File lib/drb/drb.rb, line 1113
def __drbref
  @ref
end

Получает ссылку на объект, если он локальный.

__drburi() Показать исходный код
# File lib/drb/drb.rb, line 1108
def __drburi
  @uri
end

Получает URI удалённого объекта.

_dump(lv) Показать исходный код
# File lib/drb/drb.rb, line 1085
def _dump(lv)
  Marshal.dump([@uri, @ref])
end

Сериализует этот объект.

URI и ссылка на объект сериализуются.

method_missing(msg_id, *a, &b) Показать исходный код
# File lib/drb/drb.rb, line 1133
def method_missing(msg_id, *a, &b)
  if DRb.here?(@uri)
    obj = DRb.to_obj(@ref)
    DRb.current_server.check_insecure_method(obj, msg_id)
    return obj.__send__(msg_id, *a, &b)
  end

  succ, result = self.class.with_friend(@uri) do
    DRbConn.open(@uri) do |conn|
      conn.send_message(self, msg_id, a, b)
    end
  end

  if succ
    return result
  elsif DRbUnknown === result
    raise result
  else
    bt = self.class.prepare_backtrace(@uri, result)
    result.set_backtrace(bt + caller)
    raise result
  end
end

Перенаправляет вызовы методов на удалённый объект-референцию.

respond_to?(msg_id, priv=false) Показать исходный код
# File lib/drb/drb.rb, line 1121
def respond_to?(msg_id, priv=false)
  case msg_id
  when :_dump
    true
  when :marshal_dump
    false
  else
    method_missing(:respond_to?, msg_id, priv)
  end
end

Перенаправляет respond_to? на удалённый объект-референцию.

Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API