From: Eric Hodel Date: 2004-12-11T07:20:33+09:00 Subject: Address of current client in DRb front object DRb stores the current client in Thread.current['DRb']['client'], but there is no 'friendly' method to access it like Thread.current['DRb']['server']'s #current_server. I wrote the following patch to add #current_client: Index: lib/drb/drb.rb =================================================================== RCS file: /src/ruby/lib/drb/drb.rb,v retrieving revision 1.21 diff -u -r1.21 drb.rb --- lib/drb/drb.rb 28 Jul 2004 09:05:07 -0000 1.21 +++ lib/drb/drb.rb 10 Dec 2004 22:19:35 -0000 @@ -401,6 +401,11 @@ # See #current_server. class DRbServerNotFound < DRbError; end + # Error raised by the DRb module when an attempt is made to refer to + # the context's current drb client but the context does not have one. + # See #current_client. + class DRbClientNotFound < DRbError; end + # Error raised by the DRbProtocol module when it cannot find any # protocol implementation support the scheme specified in a URI. class DRbBadURI < DRbError; end @@ -1529,6 +1534,23 @@ return server end module_function :current_server + + # Get the 'current' client. + # + # 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 + # client is that client. + # + # If the above rule fails to find a client, a DRbClientNotFound + # error is raised. + def current_client + drb = Thread.current['DRb'] + client = (drb && drb['client']) ? drb['client'] : nil + raise DRbClientNotFound unless client + return client + end + module_function :current_client # Stop the local dRuby server. #