Added facilities for being notified when the parlor director receives a

game ready notification and for taking charge of the process of entering
the game room.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@980 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Michael Bayne
2002-02-09 11:23:49 +00:00
parent 1bca84927f
commit fca91d350b
2 changed files with 60 additions and 3 deletions
@@ -0,0 +1,25 @@
//
// $Id: GameReadyObserver.java,v 1.1 2002/02/09 11:23:49 mdb Exp $
package com.threerings.parlor.client;
/**
* Used to inform interested parties when the {@link ParlorDirector}
* receives a game ready notification. The observers can ratify the
* decision to head directly into the game or can take responsibility
* themselves for doing so.
*/
public interface GameReadyObserver
{
/**
* Called when a game ready notification is received.
*
* @param gameOid the place oid of the ready game.
*
* @return if the observer returns true from this method, the parlor
* director assumes they will take care of entering the game room
* after performing processing of their own. If all observers return
* false, the director will enter the game room automatically.
*/
public boolean receivedGameReady (int gameOid);
}
@@ -1,5 +1,5 @@
//
// $Id: ParlorDirector.java,v 1.13 2001/10/23 02:22:16 mdb Exp $
// $Id: ParlorDirector.java,v 1.14 2002/02/09 11:23:49 mdb Exp $
package com.threerings.parlor.client;
@@ -54,6 +54,24 @@ public class ParlorDirector
_handler = handler;
}
/**
* Adds the specified observer to the list of entities that are
* notified when we receive a game ready notification.
*/
public void addGameReadyObserver (GameReadyObserver observer)
{
_grobs.add(observer);
}
/**
* Removes the specified observer from the list of entities that are
* notified when we receive a game ready notification.
*/
public void removeGameReadyObserver (GameReadyObserver observer)
{
_grobs.remove(observer);
}
/**
* Requests that the named user be invited to a game described by the
* supplied game config.
@@ -196,8 +214,18 @@ public class ParlorDirector
{
Log.info("Handling game ready [goid=" + gameOid + "].");
// go there
_ctx.getLocationDirector().moveTo(gameOid);
// see what our observers have to say about it
boolean handled = false;
for (int i = 0; i < _grobs.size(); i++) {
GameReadyObserver grob = (GameReadyObserver)_grobs.get(i);
handled = grob.receivedGameReady(gameOid) || handled;
}
// if none of the observers took matters into their own hands,
// then we'll head on over to the game room ourselves
if (!handled) {
_ctx.getLocationDirector().moveTo(gameOid);
}
}
/**
@@ -476,4 +504,8 @@ public class ParlorDirector
/** A counter used to assign a unique id to every invitation. */
protected static int _localInvitationId = 0;
/** We notify the entities on this list when we get a game ready
* notification. */
protected ArrayList _grobs = new ArrayList();
}