Hi, 

> Apparently I didn't strip all I could strip from the previous example.
> This is the bare bones of the problem: the last line returns false
> instead of the expected true.  Am I misunderstanding something basic
> about the way DRb works?  Maybe passing ``self'' in Client.login does
> not really pass a reference to self, so it does not match when it is
> later compared in Client.online? ?

It's a equivarent problem. Please, try the 'drb/eq' module. 

> #!/usr/bin/env ruby
> 
> require 'drb'

require 'drb/drb'
require 'drb/eq'

> class Server
>   def initialize
>     @users = []
>   end
>   def register(user)
>     @users.push user unless @users.include?(user)
>   end
>   def online?(user)
>     @users.include?(user)
>   end
> end

'drb/eq' defines DRbObject#== method. 

FYI, drb-1.3.3b's 'drb/eq' has hash, and eql? methods.
(drb-1.3.3b: URL:http://www.ruby-lang.org/~knu/cgi-bin/cvsweb.cgi/lib/drb/lib/drb/)

--- drb/eq, drb-1.3.3b ---
module DRb
  class DRbObject
    def ==(other)
      return false unless DRbObject === other
     (@ref == other.__drbref) && (@uri == other.__drburi)
    end

    def hash
      [@uri, @ref].hash
    end

    alias eql? ==
  end
end


SeKi.