Module: DRb

Defined in:
lib/drb/drb.rb,
lib/drb/eq.rb,
lib/drb/gw.rb,
lib/drb/ssl.rb,
lib/drb/unix.rb,
lib/drb/extserv.rb,
lib/drb/version.rb,
lib/drb/extservm.rb,
lib/drb/observer.rb,
lib/drb/weakidconv.rb,
lib/drb/timeridconv.rb,
lib/drb/invokemethod.rb

Overview

for ruby-1.8.0

Defined Under Namespace

Modules: DRbObservable, DRbProtocol, DRbUndumped Classes: DRbArray, DRbBadScheme, DRbBadURI, DRbConn, DRbConnError, DRbError, DRbIdConv, DRbMessage, DRbObject, DRbRemoteError, DRbSSLSocket, DRbServer, DRbServerNotFound, DRbTCPSocket, DRbUNIXSocket, DRbURIOption, DRbUnknown, DRbUnknownError, ExtServ, ExtServManager, GW, GWIdConv, ThreadObject, TimerIdConv, WeakIdConv

Constant Summary collapse

VERSION =
"2.0.4"

Class Method Summary collapse

Class Method Details

.configObject

Get the configuration of the current server.

If there is no current server, this returns the default configuration. See #current_server and DRbServer::make_config.


1826
1827
1828
1829
1830
# File 'lib/drb/drb.rb', line 1826

def config
  current_server.config
rescue
  DRbServer.make_config
end

.current_serverObject

Get the 'current' server.

In the context of execution taking place within the main thread of a dRuby server (typically, as a result of a remote call on the server or one of its objects), the current server is that server. Otherwise, the current server is the primary server.

If the above rule fails to find a server, a DRbServerNotFound error is raised.

Raises:


1783
1784
1785
1786
1787
1788
# File 'lib/drb/drb.rb', line 1783

def current_server
  drb = Thread.current['DRb']
  server = (drb && drb['server']) ? drb['server'] : @primary_server
  raise DRbServerNotFound unless server
  return server
end

.fetch_server(uri) ⇒ Object

Retrieves the server with the given uri.

See also regist_server and remove_server.


1928
1929
1930
# File 'lib/drb/drb.rb', line 1928

def fetch_server(uri)
  @server[uri]
end

.frontObject

Get the front object of the current server.

This raises a DRbServerNotFound error if there is no current server. See #current_server.


1837
1838
1839
# File 'lib/drb/drb.rb', line 1837

def front
  current_server.front
end

.here?(uri) ⇒ Boolean

Is uri the URI for the current local server?

Returns:

  • (Boolean)

1816
1817
1818
1819
# File 'lib/drb/drb.rb', line 1816

def here?(uri)
  current_server.here?(uri) rescue false
  # (current_server.uri rescue nil) == uri
end

.install_acl(acl) ⇒ Object

Set the default ACL to acl.

See DRb::DRbServer.default_acl.


1882
1883
1884
# File 'lib/drb/drb.rb', line 1882

def install_acl(acl)
  DRbServer.default_acl(acl)
end

.install_id_conv(idconv) ⇒ Object

Set the default id conversion object.

This is expected to be an instance such as DRb::DRbIdConv that responds to #to_id and #to_obj that can convert objects to and from DRb references.

See DRbServer#default_id_conv.


1874
1875
1876
# File 'lib/drb/drb.rb', line 1874

def install_id_conv(idconv)
  DRbServer.default_id_conv(idconv)
end

.mutexObject

:nodoc:


1888
1889
1890
# File 'lib/drb/drb.rb', line 1888

def mutex # :nodoc:
  @mutex
end

.primary_serverObject

The primary local dRuby server.

This is the server created by the #start_service call.


1770
1771
1772
# File 'lib/drb/drb.rb', line 1770

def primary_server
  @primary_server
end

.primary_server=(value) ⇒ Object

The primary local dRuby server.

This is the server created by the #start_service call.


1770
1771
1772
# File 'lib/drb/drb.rb', line 1770

def primary_server=(value)
  @primary_server = value
end

.regist_server(server) ⇒ Object

Registers server with DRb.

This is called when a new DRb::DRbServer is created.

If there is no primary server then server becomes the primary server.

Example:

require 'drb'

s = DRb::DRbServer.new # automatically calls regist_server
DRb.fetch_server s.uri #=> #<DRb::DRbServer:0x...>

1906
1907
1908
1909
1910
1911
# File 'lib/drb/drb.rb', line 1906

def regist_server(server)
  @server[server.uri] = server
  mutex.synchronize do
    @primary_server = server unless @primary_server
  end
end

.remove_server(server) ⇒ Object

Removes server from the list of registered servers.


1915
1916
1917
1918
1919
1920
1921
1922
# File 'lib/drb/drb.rb', line 1915

def remove_server(server)
  @server.delete(server.uri)
  mutex.synchronize do
    if @primary_server == server
      @primary_server = nil
    end
  end
end

.start_service(uri = nil, front = nil, config = nil) ⇒ Object

Start a dRuby server locally.

The new dRuby server will become the primary server, even if another server is currently the primary server.

uri is the URI for the server to bind to. If nil, the server will bind to random port on the default local host name and use the default dRuby protocol.

front is the server's front object. This may be nil.

config is the configuration for the new server. This may be nil.

See DRbServer::new.


1762
1763
1764
# File 'lib/drb/drb.rb', line 1762

def start_service(uri=nil, front=nil, config=nil)
  @primary_server = DRbServer.new(uri, front, config)
end

.stop_serviceObject

Stop the local dRuby server.

This operates on the primary server. If there is no primary server currently running, it is a noop.


1795
1796
1797
1798
# File 'lib/drb/drb.rb', line 1795

def stop_service
  @primary_server.stop_service if @primary_server
  @primary_server = nil
end

.threadObject

Get the thread of the primary server.

This returns nil if there is no primary server. See #primary_server.


1863
1864
1865
# File 'lib/drb/drb.rb', line 1863

def thread
  @primary_server ? @primary_server.thread : nil
end

.to_id(obj) ⇒ Object

Get a reference id for an object using the current server.

This raises a DRbServerNotFound error if there is no current server. See #current_server.


1854
1855
1856
# File 'lib/drb/drb.rb', line 1854

def to_id(obj)
  current_server.to_id(obj)
end

.to_obj(ref) ⇒ Object

Convert a reference into an object using the current server.

This raises a DRbServerNotFound error if there is no current server. See #current_server.


1846
1847
1848
# File 'lib/drb/drb.rb', line 1846

def to_obj(ref)
  current_server.to_obj(ref)
end

.uriObject

Get the URI defining the local dRuby space.

This is the URI of the current server. See #current_server.


1804
1805
1806
1807
1808
1809
1810
1811
1812
# File 'lib/drb/drb.rb', line 1804

def uri
  drb = Thread.current['DRb']
  client = (drb && drb['client'])
  if client
    uri = client.uri
    return uri if uri
  end
  current_server.uri
end