In Files

  • drb/drb.rb
  • drb/eq.rb
  • drb/gw.rb

DRb::DRbObject

Object wrapping a reference to a remote drb object.

Method calls on this object are relayed to the remote object that this object is a stub for.

Public Class Methods

_load(s) click to toggle source

Unmarshall a marshalled DRbObject.

If the referenced object is located within the local server, then the object itself is returned. Otherwise, a new DRbObject is created to act as a stub for the remote referenced object.

 
               # File drb/drb.rb, line 1021
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
            
new(obj, uri=nil) click to toggle source

Create a new remote object stub.

obj is the (local) object we want to create a stub for. Normally this is nil. uri is the URI of the remote object that this will be a stub for.

 
               # File drb/drb.rb, line 1062
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
            
new_with(uri, ref) click to toggle source

Creates a DRb::DRbObject given the reference information to the remote host uri and object ref.

 
               # File drb/drb.rb, line 1038
def self.new_with(uri, ref)
  it = self.allocate
  it.instance_variable_set(:@uri, uri)
  it.instance_variable_set(:@ref, ref)
  it
end
            
new_with_uri(uri) click to toggle source

Create a new DRbObject from a URI alone.

 
               # File drb/drb.rb, line 1046
def self.new_with_uri(uri)
  self.new(nil, uri)
end
            

Public Instance Methods

__drbref() click to toggle source

Get the reference of the object, if local.

 
               # File drb/drb.rb, line 1081
def __drbref
  @ref
end
            
__drburi() click to toggle source

Get the URI of the remote object.

 
               # File drb/drb.rb, line 1076
def __drburi
  @uri
end
            
_dump(lv) click to toggle source

Marshall this object.

The URI and ref of the object are marshalled.

 
               # File drb/drb.rb, line 1053
def _dump(lv)
  Marshal.dump([@uri, @ref])
end
            
method_missing(msg_id, *a, &b) click to toggle source

Routes method calls to the referenced remote object.

 
               # File drb/drb.rb, line 1101
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) click to toggle source

Routes respond_to? to the referenced remote object.

 
               # File drb/drb.rb, line 1089
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
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus