Augmenting the AuthResponseData with server stuff turned out to be a bad

idea because that class is shared between the client and the server, so
instead we provide a blank object reference in which the authenticator can
provide whatever information it wants to the client services.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@723 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Michael Bayne
2001-12-03 22:01:57 +00:00
parent a0ba41c31d
commit 16efe382bd
4 changed files with 71 additions and 28 deletions
@@ -1,11 +1,9 @@
// //
// $Id: CrowdClient.java,v 1.4 2001/12/03 20:14:51 mdb Exp $ // $Id: CrowdClient.java,v 1.5 2001/12/03 22:01:57 mdb Exp $
package com.threerings.crowd.server; package com.threerings.crowd.server;
import com.threerings.presents.net.AuthResponseData;
import com.threerings.presents.server.PresentsClient; import com.threerings.presents.server.PresentsClient;
import com.threerings.crowd.data.BodyObject; import com.threerings.crowd.data.BodyObject;
/** /**
@@ -14,9 +12,9 @@ import com.threerings.crowd.data.BodyObject;
*/ */
public class CrowdClient extends PresentsClient public class CrowdClient extends PresentsClient
{ {
protected void sessionWillStart (AuthResponseData rdata) protected void sessionWillStart (Object authInfo)
{ {
super.sessionWillStart(rdata); super.sessionWillStart(authInfo);
// cast our client object to a body object // cast our client object to a body object
_bodobj = (BodyObject)_clobj; _bodobj = (BodyObject)_clobj;
@@ -28,9 +26,9 @@ public class CrowdClient extends PresentsClient
CrowdServer.mapBody(_username, _bodobj); CrowdServer.mapBody(_username, _bodobj);
} }
protected void sessionWillResume (AuthResponseData rdata) protected void sessionWillResume (Object authInfo)
{ {
super.sessionWillResume(rdata); super.sessionWillResume(authInfo);
// nothing to do here presently // nothing to do here presently
} }
@@ -1,5 +1,5 @@
// //
// $Id: AuthResponse.java,v 1.9 2001/10/11 04:07:53 mdb Exp $ // $Id: AuthResponse.java,v 1.10 2001/12/03 22:01:57 mdb Exp $
package com.threerings.presents.net; package com.threerings.presents.net;
@@ -42,6 +42,27 @@ public class AuthResponse extends DownstreamMessage
return _data; return _data;
} }
/**
* The authenticator can stuff information into the auth response that
* will be made available to the client management code on the server
* after the authentication process has completed. This is provided
* because the authenticator will likely end up doing things like
* loading information from a database which it will want to pass
* along to the running system once authentication is complete.
*/
public void setAuthInfo (Object authInfo)
{
_authInfo = authInfo;
}
/**
* Returns the auth info provided by the authenticator implementation.
*/
public Object getAuthInfo ()
{
return _authInfo;
}
public short getType () public short getType ()
{ {
return TYPE; return TYPE;
@@ -67,4 +88,7 @@ public class AuthResponse extends DownstreamMessage
} }
protected AuthResponseData _data; protected AuthResponseData _data;
/** Stores auth info provided by the authenticator. */
protected Object _authInfo;
} }
@@ -1,5 +1,5 @@
// //
// $Id: ClientManager.java,v 1.12 2001/12/03 20:14:51 mdb Exp $ // $Id: ClientManager.java,v 1.13 2001/12/03 22:01:57 mdb Exp $
package com.threerings.presents.server; package com.threerings.presents.server;
@@ -98,7 +98,7 @@ public class ClientManager implements ConnectionObserver
if (client != null) { if (client != null) {
Log.info("Session resumed [username=" + username + Log.info("Session resumed [username=" + username +
", conn=" + conn + "]."); ", conn=" + conn + "].");
client.resumeSession(conn, rsp.getData()); client.resumeSession(conn, rsp.getAuthInfo());
} else { } else {
Log.info("Session initiated [username=" + username + Log.info("Session initiated [username=" + username +
@@ -106,7 +106,7 @@ public class ClientManager implements ConnectionObserver
// create a new client and stick'em in the table // create a new client and stick'em in the table
try { try {
client = (PresentsClient)_clientClass.newInstance(); client = (PresentsClient)_clientClass.newInstance();
client.startSession(this, username, conn, rsp.getData()); client.startSession(this, username, conn, rsp.getAuthInfo());
_usermap.put(username, client); _usermap.put(username, client);
} catch (Exception e) { } catch (Exception e) {
Log.warning("Failed to instantiate client instance to " + Log.warning("Failed to instantiate client instance to " +
@@ -1,5 +1,5 @@
// //
// $Id: PresentsClient.java,v 1.25 2001/12/03 20:14:51 mdb Exp $ // $Id: PresentsClient.java,v 1.26 2001/12/03 22:01:57 mdb Exp $
package com.threerings.presents.server; package com.threerings.presents.server;
@@ -11,9 +11,31 @@ import com.samskivert.util.HashIntMap;
import com.threerings.presents.Log; import com.threerings.presents.Log;
import com.threerings.presents.data.ClientObject; import com.threerings.presents.data.ClientObject;
import com.threerings.presents.dobj.*;
import com.threerings.presents.net.*; import com.threerings.presents.dobj.DEvent;
import com.threerings.presents.server.net.*; import com.threerings.presents.dobj.DObject;
import com.threerings.presents.dobj.EventListener;
import com.threerings.presents.dobj.ObjectAccessException;
import com.threerings.presents.dobj.Subscriber;
import com.threerings.presents.dobj.TypedEvent;
import com.threerings.presents.net.BootstrapData;
import com.threerings.presents.net.BootstrapNotification;
import com.threerings.presents.net.EventNotification;
import com.threerings.presents.net.UpstreamMessage;
import com.threerings.presents.net.ForwardEventRequest;
import com.threerings.presents.net.LogoffRequest;
import com.threerings.presents.net.PingRequest;
import com.threerings.presents.net.SubscribeRequest;
import com.threerings.presents.net.UnsubscribeRequest;
import com.threerings.presents.net.FailureResponse;
import com.threerings.presents.net.ObjectResponse;
import com.threerings.presents.net.PongResponse;
import com.threerings.presents.server.net.Connection;
import com.threerings.presents.server.net.MessageHandler;
/** /**
* A client object represents a client session in the server. It is * A client object represents a client session in the server. It is
@@ -54,7 +76,7 @@ public class PresentsClient
*/ */
protected void startSession ( protected void startSession (
ClientManager cmgr, String username, Connection conn, ClientManager cmgr, String username, Connection conn,
final AuthResponseData rdata) final Object authInfo)
{ {
_cmgr = cmgr; _cmgr = cmgr;
_username = username; _username = username;
@@ -67,7 +89,7 @@ public class PresentsClient
public void objectAvailable (DObject object) public void objectAvailable (DObject object)
{ {
setClientObject((ClientObject)object); setClientObject((ClientObject)object);
sessionWillStart(rdata); sessionWillStart(authInfo);
sendBootstrap(); sendBootstrap();
} }
@@ -97,8 +119,7 @@ public class PresentsClient
* authenticates as this already established client. This must only be * authenticates as this already established client. This must only be
* called from the congmr thread. * called from the congmr thread.
*/ */
protected void resumeSession ( protected void resumeSession (Connection conn, final Object authInfo)
Connection conn, final AuthResponseData rdata)
{ {
Connection oldconn = getConnection(); Connection oldconn = getConnection();
@@ -124,7 +145,7 @@ public class PresentsClient
{ {
// now that we're on the dobjmgr thread we can resume our // now that we're on the dobjmgr thread we can resume our
// session resumption // session resumption
finishResumeSession(rdata); finishResumeSession(authInfo);
return false; return false;
} }
}; };
@@ -136,10 +157,10 @@ public class PresentsClient
* resumption. We call some call backs and send the bootstrap info to * resumption. We call some call backs and send the bootstrap info to
* the client. * the client.
*/ */
protected void finishResumeSession (AuthResponseData rdata) protected void finishResumeSession (Object authInfo)
{ {
// let derived classes do any session resuming // let derived classes do any session resuming
sessionWillResume(rdata); sessionWillResume(authInfo);
// send off a bootstrap notification immediately because we've // send off a bootstrap notification immediately because we've
// already got our client object // already got our client object
@@ -240,10 +261,10 @@ public class PresentsClient
* thread which means that object manipulations are OK, but client * thread which means that object manipulations are OK, but client
* instance manipulations must done carefully. * instance manipulations must done carefully.
* *
* @param rdata the data object delivered to the client during the * @param authInfo optional information provided by the authenticator
* authentication phase. * that it obtained during the authentication phase.
*/ */
protected void sessionWillStart (AuthResponseData rdata) protected void sessionWillStart (Object authInfo)
{ {
} }
@@ -258,10 +279,10 @@ public class PresentsClient
* thread which means that object manipulations are OK, but client * thread which means that object manipulations are OK, but client
* instance manipulations must done carefully. * instance manipulations must done carefully.
* *
* @param rdata the data object delivered to the client during the * @param authInfo optional information provided by the authenticator
* authentication phase. * that it obtained during the authentication phase.
*/ */
protected void sessionWillResume (AuthResponseData rdata) protected void sessionWillResume (Object authInfo)
{ {
} }