mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* lib/drb/drb.rb: Improved documentation by adding or hiding methods.
* lib/drb/eq.rb: ditto. * lib/drb/extserv.rb: ditto. * lib/drb/gw.rb: ditto. * lib/drb/invokemethod.rb: ditto. * lib/drb/observer.rb: ditto. * lib/drb/ssl.rb: ditto. * lib/drb/timeridconv.rb: ditto. * lib/drb/unix.rb: ditto. * sample/drb/gw_cu.rb: Fixed bug in DRb gateway sample. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38937 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									d50bd4939a
								
							
						
					
					
						commit
						90e69dfdaf
					
				
					 11 changed files with 124 additions and 17 deletions
				
			
		
							
								
								
									
										14
									
								
								ChangeLog
									
										
									
									
									
								
							
							
						
						
									
										14
									
								
								ChangeLog
									
										
									
									
									
								
							| 
						 | 
					@ -1,3 +1,17 @@
 | 
				
			||||||
 | 
					Fri Jan 25 12:23:29 2013  Eric Hodel  <drbrain@segment7.net>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						* lib/drb/drb.rb:  Improved documentation by adding or hiding methods.
 | 
				
			||||||
 | 
						* lib/drb/eq.rb:  ditto.
 | 
				
			||||||
 | 
						* lib/drb/extserv.rb:  ditto.
 | 
				
			||||||
 | 
						* lib/drb/gw.rb:  ditto.
 | 
				
			||||||
 | 
						* lib/drb/invokemethod.rb:  ditto.
 | 
				
			||||||
 | 
						* lib/drb/observer.rb:  ditto.
 | 
				
			||||||
 | 
						* lib/drb/ssl.rb:  ditto.
 | 
				
			||||||
 | 
						* lib/drb/timeridconv.rb:  ditto.
 | 
				
			||||||
 | 
						* lib/drb/unix.rb:  ditto.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						* sample/drb/gw_cu.rb:  Fixed bug in DRb gateway sample.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Fri Jan 25 12:01:56 2013  Koichi Sasada  <ko1@atdot.net>
 | 
					Fri Jan 25 12:01:56 2013  Koichi Sasada  <ko1@atdot.net>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	* vm_core.h: modify a comment about rb_iseq_t::local_size.
 | 
						* vm_core.h: modify a comment about rb_iseq_t::local_size.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -426,6 +426,8 @@ module DRb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # An exception wrapping an error object
 | 
					  # An exception wrapping an error object
 | 
				
			||||||
  class DRbRemoteError < DRbError
 | 
					  class DRbRemoteError < DRbError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Creates a new remote error that wraps the Exception +error+
 | 
				
			||||||
    def initialize(error)
 | 
					    def initialize(error)
 | 
				
			||||||
      @reason = error.class.to_s
 | 
					      @reason = error.class.to_s
 | 
				
			||||||
      super("#{error.message} (#{error.class})")
 | 
					      super("#{error.message} (#{error.class})")
 | 
				
			||||||
| 
						 | 
					@ -505,7 +507,16 @@ module DRb
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # An Array wrapper that can be sent to another server via DRb.
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  # All entries in the array will be dumped or be references that point to
 | 
				
			||||||
 | 
					  # the local server.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  class DRbArray
 | 
					  class DRbArray
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Creates a new DRbArray that either dumps or wraps all the items in +ary+
 | 
				
			||||||
 | 
					    # so they can be loaded by a remote DRb server.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def initialize(ary)
 | 
					    def initialize(ary)
 | 
				
			||||||
      @ary = ary.collect { |obj|
 | 
					      @ary = ary.collect { |obj|
 | 
				
			||||||
        if obj.kind_of? DRbUndumped
 | 
					        if obj.kind_of? DRbUndumped
 | 
				
			||||||
| 
						 | 
					@ -521,11 +532,11 @@ module DRb
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def self._load(s)
 | 
					    def self._load(s) # :nodoc:
 | 
				
			||||||
      Marshal::load(s)
 | 
					      Marshal::load(s)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _dump(lv)
 | 
					    def _dump(lv) # :nodoc:
 | 
				
			||||||
      Marshal.dump(@ary)
 | 
					      Marshal.dump(@ary)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
| 
						 | 
					@ -629,7 +640,7 @@ module DRb
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private
 | 
					    private
 | 
				
			||||||
    def make_proxy(obj, error=false)
 | 
					    def make_proxy(obj, error=false) # :nodoc:
 | 
				
			||||||
      if error
 | 
					      if error
 | 
				
			||||||
        DRbRemoteError.new(obj)
 | 
					        DRbRemoteError.new(obj)
 | 
				
			||||||
      else
 | 
					      else
 | 
				
			||||||
| 
						 | 
					@ -793,10 +804,13 @@ module DRb
 | 
				
			||||||
    module_function :auto_load
 | 
					    module_function :auto_load
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # The default drb protocol.
 | 
					  # The default drb protocol which communicates over a TCP socket.
 | 
				
			||||||
  #
 | 
					  #
 | 
				
			||||||
  # Communicates over a TCP socket.
 | 
					  # The DRb TCP protocol URI looks like:
 | 
				
			||||||
 | 
					  # <code>druby://<host>:<port>?<option></code>.  The option is optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  class DRbTCPSocket
 | 
					  class DRbTCPSocket
 | 
				
			||||||
 | 
					    # :stopdoc:
 | 
				
			||||||
    private
 | 
					    private
 | 
				
			||||||
    def self.parse_uri(uri)
 | 
					    def self.parse_uri(uri)
 | 
				
			||||||
      if uri =~ /^druby:\/\/(.*?):(\d+)(\?(.*))?$/
 | 
					      if uri =~ /^druby:\/\/(.*?):(\d+)(\?(.*))?$/
 | 
				
			||||||
| 
						 | 
					@ -840,6 +854,7 @@ module DRb
 | 
				
			||||||
      return TCPServer.open('0.0.0.0', port) if families.has_key?('AF_INET')
 | 
					      return TCPServer.open('0.0.0.0', port) if families.has_key?('AF_INET')
 | 
				
			||||||
      return TCPServer.open('::', port) if families.has_key?('AF_INET6')
 | 
					      return TCPServer.open('::', port) if families.has_key?('AF_INET6')
 | 
				
			||||||
      return TCPServer.open(port)
 | 
					      return TCPServer.open(port)
 | 
				
			||||||
 | 
					      # :stopdoc:
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Open a server listening for connections at +uri+ using
 | 
					    # Open a server listening for connections at +uri+ using
 | 
				
			||||||
| 
						 | 
					@ -1008,6 +1023,8 @@ module DRb
 | 
				
			||||||
      self.new_with(uri, ref)
 | 
					      self.new_with(uri, ref)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Creates a new DRbObject from a +uri+ and object +ref+.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def self.new_with(uri, ref)
 | 
					    def self.new_with(uri, ref)
 | 
				
			||||||
      it = self.allocate
 | 
					      it = self.allocate
 | 
				
			||||||
      it.instance_variable_set(:@uri, uri)
 | 
					      it.instance_variable_set(:@uri, uri)
 | 
				
			||||||
| 
						 | 
					@ -1058,6 +1075,7 @@ module DRb
 | 
				
			||||||
    undef :to_s
 | 
					    undef :to_s
 | 
				
			||||||
    undef :to_a if respond_to?(:to_a)
 | 
					    undef :to_a if respond_to?(:to_a)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Routes respond_to? to the referenced remote object.
 | 
				
			||||||
    def respond_to?(msg_id, priv=false)
 | 
					    def respond_to?(msg_id, priv=false)
 | 
				
			||||||
      case msg_id
 | 
					      case msg_id
 | 
				
			||||||
      when :_dump
 | 
					      when :_dump
 | 
				
			||||||
| 
						 | 
					@ -1069,7 +1087,7 @@ module DRb
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Routes method calls to the referenced object.
 | 
					    # Routes method calls to the referenced remote object.
 | 
				
			||||||
    def method_missing(msg_id, *a, &b)
 | 
					    def method_missing(msg_id, *a, &b)
 | 
				
			||||||
      if DRb.here?(@uri)
 | 
					      if DRb.here?(@uri)
 | 
				
			||||||
        obj = DRb.to_obj(@ref)
 | 
					        obj = DRb.to_obj(@ref)
 | 
				
			||||||
| 
						 | 
					@ -1094,7 +1112,7 @@ module DRb
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def self.with_friend(uri)
 | 
					    def self.with_friend(uri) # :nodoc:
 | 
				
			||||||
      friend = DRb.fetch_server(uri)
 | 
					      friend = DRb.fetch_server(uri)
 | 
				
			||||||
      return yield() unless friend
 | 
					      return yield() unless friend
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1105,7 +1123,7 @@ module DRb
 | 
				
			||||||
      Thread.current['DRb'] = save if friend
 | 
					      Thread.current['DRb'] = save if friend
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def self.prepare_backtrace(uri, result)
 | 
					    def self.prepare_backtrace(uri, result) # :nodoc:
 | 
				
			||||||
      prefix = "(#{uri}) "
 | 
					      prefix = "(#{uri}) "
 | 
				
			||||||
      bt = []
 | 
					      bt = []
 | 
				
			||||||
      result.backtrace.each do |x|
 | 
					      result.backtrace.each do |x|
 | 
				
			||||||
| 
						 | 
					@ -1250,6 +1268,7 @@ module DRb
 | 
				
			||||||
      @@idconv = idconv
 | 
					      @@idconv = idconv
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Set the default safe level to +level+
 | 
				
			||||||
    def self.default_safe_level(level)
 | 
					    def self.default_safe_level(level)
 | 
				
			||||||
      @@safe_level = level
 | 
					      @@safe_level = level
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
| 
						 | 
					@ -1366,6 +1385,7 @@ module DRb
 | 
				
			||||||
    # The configuration of this DRbServer
 | 
					    # The configuration of this DRbServer
 | 
				
			||||||
    attr_reader :config
 | 
					    attr_reader :config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # The safe level for this server
 | 
				
			||||||
    attr_reader :safe_level
 | 
					    attr_reader :safe_level
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Set whether to operate in verbose mode.
 | 
					    # Set whether to operate in verbose mode.
 | 
				
			||||||
| 
						 | 
					@ -1383,6 +1403,7 @@ module DRb
 | 
				
			||||||
      @thread.alive?
 | 
					      @thread.alive?
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Is +uri+ the URI for this server?
 | 
				
			||||||
    def here?(uri)
 | 
					    def here?(uri)
 | 
				
			||||||
      @exported_uri.include?(uri)
 | 
					      @exported_uri.include?(uri)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
| 
						 | 
					@ -1737,12 +1758,15 @@ module DRb
 | 
				
			||||||
  module_function :install_acl
 | 
					  module_function :install_acl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @mutex = Mutex.new
 | 
					  @mutex = Mutex.new
 | 
				
			||||||
  def mutex
 | 
					  def mutex # :nodoc:
 | 
				
			||||||
    @mutex
 | 
					    @mutex
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  module_function :mutex
 | 
					  module_function :mutex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @server = {}
 | 
					  @server = {}
 | 
				
			||||||
 | 
					  # Registers +server+ with DRb.
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  # If there is no primary server then +server+ becomes the primary server.
 | 
				
			||||||
  def regist_server(server)
 | 
					  def regist_server(server)
 | 
				
			||||||
    @server[server.uri] = server
 | 
					    @server[server.uri] = server
 | 
				
			||||||
    mutex.synchronize do
 | 
					    mutex.synchronize do
 | 
				
			||||||
| 
						 | 
					@ -1751,11 +1775,13 @@ module DRb
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  module_function :regist_server
 | 
					  module_function :regist_server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Removes +server+ from the list of servers.
 | 
				
			||||||
  def remove_server(server)
 | 
					  def remove_server(server)
 | 
				
			||||||
    @server.delete(server.uri)
 | 
					    @server.delete(server.uri)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
  module_function :remove_server
 | 
					  module_function :remove_server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Retrieves the server with the given +uri+.
 | 
				
			||||||
  def fetch_server(uri)
 | 
					  def fetch_server(uri)
 | 
				
			||||||
    @server[uri]
 | 
					    @server[uri]
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
module DRb
 | 
					module DRb
 | 
				
			||||||
  class DRbObject
 | 
					  class DRbObject # :nodoc:
 | 
				
			||||||
    def ==(other)
 | 
					    def ==(other)
 | 
				
			||||||
      return false unless DRbObject === other
 | 
					      return false unless DRbObject === other
 | 
				
			||||||
     (@ref == other.__drbref) && (@uri == other.__drburi)
 | 
					     (@ref == other.__drbref) && (@uri == other.__drburi)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,6 +42,8 @@ module DRb
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# :stopdoc:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __FILE__ == $0
 | 
					if __FILE__ == $0
 | 
				
			||||||
  class Foo
 | 
					  class Foo
 | 
				
			||||||
    include DRbUndumped
 | 
					    include DRbUndumped
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,8 +2,36 @@ require 'drb/drb'
 | 
				
			||||||
require 'monitor'
 | 
					require 'monitor'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module DRb
 | 
					module DRb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Gateway id conversion forms a gateway between different DRb protocols or
 | 
				
			||||||
 | 
					  # networks.
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  # The gateway needs to install this id conversion and create servers for
 | 
				
			||||||
 | 
					  # each of the protocols or networks it will be a gateway between.  It then
 | 
				
			||||||
 | 
					  # needs to create a server that attaches to each of these networks.  For
 | 
				
			||||||
 | 
					  # example:
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  #   require 'drb/drb'
 | 
				
			||||||
 | 
					  #   require 'drb/unix'
 | 
				
			||||||
 | 
					  #   require 'drb/gw'
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  #   DRb.install_id_conv DRb::GWIdConv.new
 | 
				
			||||||
 | 
					  #   gw = DRb::GW.new
 | 
				
			||||||
 | 
					  #   s1 = DRb::DRbServer.new 'drbunix:/path/to/gateway', gw
 | 
				
			||||||
 | 
					  #   s2 = DRb::DRbServer.new 'druby://example:10000', gw
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  #   s1.thread.join
 | 
				
			||||||
 | 
					  #   s2.thread.join
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  # Each client must register services with the gateway, for example:
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  #   DRb.start_service 'drbunix:', nil # an anonymous server
 | 
				
			||||||
 | 
					  #   gw = DRbObject.new nil, 'drbunix:/path/to/gateway'
 | 
				
			||||||
 | 
					  #   gw[:unix] = some_service
 | 
				
			||||||
 | 
					  #   DRb.thread.join
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  class GWIdConv < DRbIdConv
 | 
					  class GWIdConv < DRbIdConv
 | 
				
			||||||
    def to_obj(ref)
 | 
					    def to_obj(ref) # :nodoc:
 | 
				
			||||||
      if Array === ref && ref[0] == :DRbObject
 | 
					      if Array === ref && ref[0] == :DRbObject
 | 
				
			||||||
        return DRbObject.new_with(ref[1], ref[2])
 | 
					        return DRbObject.new_with(ref[1], ref[2])
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
| 
						 | 
					@ -11,19 +39,29 @@ module DRb
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # The GW provides a synchronized store for participants in the gateway to
 | 
				
			||||||
 | 
					  # communicate.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  class GW
 | 
					  class GW
 | 
				
			||||||
    include MonitorMixin
 | 
					    include MonitorMixin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Creates a new GW
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def initialize
 | 
					    def initialize
 | 
				
			||||||
      super()
 | 
					      super()
 | 
				
			||||||
      @hash = {}
 | 
					      @hash = {}
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Retrieves +key+ from the GW
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def [](key)
 | 
					    def [](key)
 | 
				
			||||||
      synchronize do
 | 
					      synchronize do
 | 
				
			||||||
        @hash[key]
 | 
					        @hash[key]
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Stores value +v+ at +key+ in the GW
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def []=(key, v)
 | 
					    def []=(key, v)
 | 
				
			||||||
      synchronize do
 | 
					      synchronize do
 | 
				
			||||||
        @hash[key] = v
 | 
					        @hash[key] = v
 | 
				
			||||||
| 
						 | 
					@ -31,7 +69,7 @@ module DRb
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  class DRbObject
 | 
					  class DRbObject # :nodoc:
 | 
				
			||||||
    def self._load(s)
 | 
					    def self._load(s)
 | 
				
			||||||
      uri, ref = Marshal.load(s)
 | 
					      uri, ref = Marshal.load(s)
 | 
				
			||||||
      if DRb.uri == uri
 | 
					      if DRb.uri == uri
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module DRb
 | 
					module DRb
 | 
				
			||||||
  class DRbServer
 | 
					  class DRbServer
 | 
				
			||||||
    module InvokeMethod18Mixin
 | 
					    module InvokeMethod18Mixin # :nodoc: all
 | 
				
			||||||
      def block_yield(x)
 | 
					      def block_yield(x)
 | 
				
			||||||
        if x.size == 1 && x[0].class == Array
 | 
					        if x.size == 1 && x[0].class == Array
 | 
				
			||||||
          x[0] = DRbArray.new(x[0])
 | 
					          x[0] = DRbArray.new(x[0])
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,12 @@
 | 
				
			||||||
require 'observer'
 | 
					require 'observer'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module DRb
 | 
					module DRb
 | 
				
			||||||
 | 
					  # The Observable module extended to DRb.  See Observable for details.
 | 
				
			||||||
  module DRbObservable
 | 
					  module DRbObservable
 | 
				
			||||||
    include Observable
 | 
					    include Observable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Notifies observers of a change in state.  See also
 | 
				
			||||||
 | 
					    # Observable#notify_observers
 | 
				
			||||||
    def notify_observers(*arg)
 | 
					    def notify_observers(*arg)
 | 
				
			||||||
      if defined? @observer_state and @observer_state
 | 
					      if defined? @observer_state and @observer_state
 | 
				
			||||||
        if defined? @observer_peers
 | 
					        if defined? @observer_peers
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,8 +5,13 @@ require 'singleton'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module DRb
 | 
					module DRb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # The protocol for DRb over an SSL socket
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  # The URI for a DRb socket over SSL is:
 | 
				
			||||||
 | 
					  # <code>drbssl://<host>:<port>?<option></code>.  The option is optional
 | 
				
			||||||
  class DRbSSLSocket < DRbTCPSocket
 | 
					  class DRbSSLSocket < DRbTCPSocket
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # :stopdoc:
 | 
				
			||||||
    class SSLConfig
 | 
					    class SSLConfig
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      DEFAULT = {
 | 
					      DEFAULT = {
 | 
				
			||||||
| 
						 | 
					@ -190,6 +195,8 @@ module DRb
 | 
				
			||||||
        retry
 | 
					        retry
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # :stopdoc:
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  DRbProtocol.add_protocol(DRbSSLSocket)
 | 
					  DRbProtocol.add_protocol(DRbSSLSocket)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,8 +2,17 @@ require 'drb/drb'
 | 
				
			||||||
require 'monitor'
 | 
					require 'monitor'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module DRb
 | 
					module DRb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Timer id conversion keeps objects alive for a certain amount of time after
 | 
				
			||||||
 | 
					  # their last access.  The default time period is 600 seconds and can be
 | 
				
			||||||
 | 
					  # changed upon initialization.
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  # To use TimerIdConv:
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  #  DRb.install_id_conv TimerIdConv.new 60 # one minute
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  class TimerIdConv < DRbIdConv
 | 
					  class TimerIdConv < DRbIdConv
 | 
				
			||||||
    class TimerHolder2
 | 
					    class TimerHolder2 # :nodoc:
 | 
				
			||||||
      include MonitorMixin
 | 
					      include MonitorMixin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      class InvalidIndexError < RuntimeError; end
 | 
					      class InvalidIndexError < RuntimeError; end
 | 
				
			||||||
| 
						 | 
					@ -71,18 +80,19 @@ module DRb
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Creates a new TimerIdConv which will hold objects for +timeout+ seconds.
 | 
				
			||||||
    def initialize(timeout=600)
 | 
					    def initialize(timeout=600)
 | 
				
			||||||
      @holder = TimerHolder2.new(timeout)
 | 
					      @holder = TimerHolder2.new(timeout)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def to_obj(ref)
 | 
					    def to_obj(ref) # :nodoc:
 | 
				
			||||||
      return super if ref.nil?
 | 
					      return super if ref.nil?
 | 
				
			||||||
      @holder.fetch(ref)
 | 
					      @holder.fetch(ref)
 | 
				
			||||||
    rescue TimerHolder2::InvalidIndexError
 | 
					    rescue TimerHolder2::InvalidIndexError
 | 
				
			||||||
      raise "invalid reference"
 | 
					      raise "invalid reference"
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def to_id(obj)
 | 
					    def to_id(obj) # :nodoc:
 | 
				
			||||||
      return @holder.add(obj)
 | 
					      return @holder.add(obj)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,13 @@ raise(LoadError, "UNIXServer is required") unless defined?(UNIXServer)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module DRb
 | 
					module DRb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Implements DRb over a UNIX socket
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  # DRb UNIX socket URIs look like <code>drbunix:<path>?<option></code>.  The
 | 
				
			||||||
 | 
					  # option is optional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  class DRbUNIXSocket < DRbTCPSocket
 | 
					  class DRbUNIXSocket < DRbTCPSocket
 | 
				
			||||||
 | 
					    # :stopdoc:
 | 
				
			||||||
    def self.parse_uri(uri)
 | 
					    def self.parse_uri(uri)
 | 
				
			||||||
      if /^drbunix:(.*?)(\?(.*))?$/ =~ uri
 | 
					      if /^drbunix:(.*?)(\?(.*))?$/ =~ uri
 | 
				
			||||||
        filename = $1
 | 
					        filename = $1
 | 
				
			||||||
| 
						 | 
					@ -105,4 +111,5 @@ module DRb
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  DRbProtocol.add_protocol(DRbUNIXSocket)
 | 
					  DRbProtocol.add_protocol(DRbUNIXSocket)
 | 
				
			||||||
 | 
					  # :startdoc:
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,7 +13,7 @@ class Foo
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DRb.start_service('drubyunix:', nil)
 | 
					DRb.start_service('drbunix:', nil)
 | 
				
			||||||
puts DRb.uri
 | 
					puts DRb.uri
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ro = DRbObject.new(nil, ARGV.shift)
 | 
					ro = DRbObject.new(nil, ARGV.shift)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue