diff --git a/src/java/com/threerings/parlor/client/ParlorCodes.java b/src/java/com/threerings/parlor/client/ParlorCodes.java new file mode 100644 index 000000000..4c170113c --- /dev/null +++ b/src/java/com/threerings/parlor/client/ParlorCodes.java @@ -0,0 +1,36 @@ +// +// $Id: ParlorCodes.java,v 1.1 2001/10/01 22:17:34 mdb Exp $ + +package com.threerings.parlor.client; + +import com.threerings.cocktail.cher.client.InvocationCodes; + +/** + * Contains codes used by the parlor invocation services. + */ +public interface ParlorCodes extends InvocationCodes +{ + /** The module name for the parlor services. */ + public static final String MODULE_NAME = "parlor"; + + /** The message identifier for an invitation creation request or + * notification. */ + public static final String INVITE_ID = "Invite"; + + /** The message identifier for an invitation cancellation request or + * notification. */ + public static final String CANCEL_INVITE_ID = "CancelInvite"; + + /** The message identifier for an invitation response request or + * notification. */ + public static final String RESPOND_INVITE_ID = "RespondInvite"; + + /** The response code for an accepted invitation. */ + public static final int INVITATION_ACCEPTED = 0; + + /** The response code for a refused invitation. */ + public static final int INVITATION_REFUSED = 1; + + /** The response code for a countered invitation. */ + public static final int INVITATION_COUNTERED = 2; +} diff --git a/src/java/com/threerings/parlor/client/ParlorDirector.java b/src/java/com/threerings/parlor/client/ParlorDirector.java index 92a6a29ba..3abc2a5ca 100644 --- a/src/java/com/threerings/parlor/client/ParlorDirector.java +++ b/src/java/com/threerings/parlor/client/ParlorDirector.java @@ -1,5 +1,5 @@ // -// $Id: ParlorDirector.java,v 1.3 2001/10/01 06:19:15 mdb Exp $ +// $Id: ParlorDirector.java,v 1.4 2001/10/01 22:17:34 mdb Exp $ package com.threerings.parlor.client; @@ -19,6 +19,7 @@ import com.threerings.parlor.util.ParlorContext; * that started. */ public class ParlorDirector + implements ParlorCodes { /** * Constructs a parlor director and provides it with the parlor @@ -90,8 +91,7 @@ public class ParlorDirector // generate the invocation service request ParlorService.respond(_ctx.getClient(), invite.remoteId, - ParlorService.INVITATION_ACCEPTED, - null, this); + INVITATION_ACCEPTED, null, this); } /** @@ -114,8 +114,7 @@ public class ParlorDirector // generate the invocation service request ParlorService.respond(_ctx.getClient(), invite.remoteId, - ParlorService.INVITATION_REFUSED, - message, this); + INVITATION_REFUSED, message, this); } /** @@ -146,8 +145,7 @@ public class ParlorDirector // generate the invocation service request ParlorService.respond(_ctx.getClient(), invite.remoteId, - ParlorService.INVITATION_COUNTERED, - config, this); + INVITATION_COUNTERED, config, this); } /** @@ -220,9 +218,9 @@ public class ParlorDirector * * @param remoteId the unique indentifier for the invitation. * @param code the response code, either {@link - * ParlorService#INVITATION_ACCEPTED} or {@link - * ParlorService#INVITATION_REFUSED} or {@link - * ParlorService#INVITATION_COUNTERED}. + * ParlorCodes#INVITATION_ACCEPTED} or {@link + * ParlorCodes#INVITATION_REFUSED} or {@link + * ParlorCodes#INVITATION_COUNTERED}. * @param arg in the case of a refused invitation, a string * containing a message provided by the invited user explaining the * reason for refusal (the empty string if no explanation was @@ -251,16 +249,16 @@ public class ParlorDirector // notify the observer try { switch (code) { - case ParlorService.INVITATION_ACCEPTED: + case INVITATION_ACCEPTED: invite.observer.invitationAccepted(invite.inviteId); break; - case ParlorService.INVITATION_REFUSED: + case INVITATION_REFUSED: invite.observer.invitationRefused( invite.inviteId, (String)arg); break; - case ParlorService.INVITATION_COUNTERED: + case INVITATION_COUNTERED: invite.observer.invitationCountered( invite.inviteId, (GameConfig)arg); break; @@ -275,7 +273,7 @@ public class ParlorDirector // unless the invitation was countered, we can remove it from the // pending table because it's resolved - if (code != ParlorService.INVITATION_COUNTERED) { + if (code != INVITATION_COUNTERED) { _pendingInvites.remove(remoteId); } } diff --git a/src/java/com/threerings/parlor/client/ParlorService.java b/src/java/com/threerings/parlor/client/ParlorService.java index 03f82433b..406db2f4d 100644 --- a/src/java/com/threerings/parlor/client/ParlorService.java +++ b/src/java/com/threerings/parlor/client/ParlorService.java @@ -1,5 +1,5 @@ // -// $Id: ParlorService.java,v 1.3 2001/10/01 06:19:15 mdb Exp $ +// $Id: ParlorService.java,v 1.4 2001/10/01 22:17:34 mdb Exp $ package com.threerings.parlor.client; @@ -19,32 +19,8 @@ import com.threerings.parlor.data.GameConfig; * * @see ParlorDirector */ -public class ParlorService +public class ParlorService implements ParlorCodes { - /** The module name for the parlor services. */ - public static final String MODULE = "parlor"; - - /** The message identifier for an invitation creation request or - * notification. */ - public static final String INVITE_ID = "Invite"; - - /** The message identifier for an invitation cancellation request or - * notification. */ - public static final String CANCEL_INVITE_ID = "CancelInvite"; - - /** The message identifier for an invitation response request or - * notification. */ - public static final String RESPOND_INVITE_ID = "RespondInvite"; - - /** The response code for an accepted invitation. */ - public static final int INVITATION_ACCEPTED = 0; - - /** The response code for a refused invitation. */ - public static final int INVITATION_REFUSED = 1; - - /** The response code for a countered invitation. */ - public static final int INVITATION_COUNTERED = 2; - /** * You probably don't want to call this directly, but want to generate * your invitation request via {@link ParlorDirector#invite}. Requests @@ -68,7 +44,7 @@ public class ParlorService Object[] args = new Object[] { invitee, config }; Log.info("Sending invite request [to=" + invitee + ", cfg=" + config + "]."); - return invmgr.invoke(MODULE, INVITE_ID, args, rsptarget); + return invmgr.invoke(MODULE_NAME, INVITE_ID, args, rsptarget); } /** @@ -102,7 +78,8 @@ public class ParlorService args[2] = (arg == null) ? "" : arg; Log.info("Sending invitation response [inviteId=" + inviteId + ", code=" + code + ", arg=" + arg + "]."); - return invmgr.invoke(MODULE, RESPOND_INVITE_ID, args, rsptarget); + return invmgr.invoke( + MODULE_NAME, RESPOND_INVITE_ID, args, rsptarget); } /** @@ -124,6 +101,6 @@ public class ParlorService Object[] args = new Object[] { new Integer(inviteId) }; Log.info("Sending invitation cancellation " + "[inviteId=" + inviteId + "]."); - return invmgr.invoke(MODULE, CANCEL_INVITE_ID, args, rsptarget); + return invmgr.invoke(MODULE_NAME, CANCEL_INVITE_ID, args, rsptarget); } } diff --git a/src/java/com/threerings/parlor/game/GameConfig.java b/src/java/com/threerings/parlor/game/GameConfig.java index 1af4c9283..8566ad300 100644 --- a/src/java/com/threerings/parlor/game/GameConfig.java +++ b/src/java/com/threerings/parlor/game/GameConfig.java @@ -1,5 +1,5 @@ // -// $Id: GameConfig.java,v 1.2 2001/10/01 06:19:15 mdb Exp $ +// $Id: GameConfig.java,v 1.3 2001/10/01 22:17:34 mdb Exp $ package com.threerings.parlor.data; @@ -19,7 +19,7 @@ import com.threerings.cocktail.cher.io.Streamable; *
The game config object is also the mechanism used to instantiate
* the appropriate game manager and controller. Every game must have an
* associated game config derived class that overrides {@link
- * #getControllerClass} and {@link getManagerClassName}, returning the
+ * #getControllerClass} and {@link #getManagerClassName}, returning the
* appropriate game controller and manager class for that game. Thus the
* entire chain of events that causes a particular game to be created is
* the construction of the appropriate game config instance which is
diff --git a/src/java/com/threerings/parlor/server/ParlorManager.java b/src/java/com/threerings/parlor/server/ParlorManager.java
index 10cfb91fa..a52d6baff 100644
--- a/src/java/com/threerings/parlor/server/ParlorManager.java
+++ b/src/java/com/threerings/parlor/server/ParlorManager.java
@@ -1,12 +1,15 @@
//
-// $Id: ParlorManager.java,v 1.1 2001/10/01 02:56:35 mdb Exp $
+// $Id: ParlorManager.java,v 1.2 2001/10/01 22:17:34 mdb Exp $
package com.threerings.parlor.server;
import com.samskivert.util.Config;
import com.threerings.cocktail.cher.server.InvocationManager;
-import com.threerings.parlor.client.ParlorService;
+import com.threerings.cocktail.party.data.BodyObject;
+
+import com.threerings.parlor.client.ParlorCodes;
+import com.threerings.parlor.data.GameConfig;
/**
* The parlor manager is responsible for the parlor services in
@@ -16,6 +19,7 @@ import com.threerings.parlor.client.ParlorService;
* game.
*/
public class ParlorManager
+ implements ParlorCodes
{
/**
* Initializes the parlor manager. This should be called by the server
@@ -30,6 +34,25 @@ public class ParlorManager
{
// register our invocation provider
ParlorProvider pprov = new ParlorProvider(this);
- invmgr.registerProvider(ParlorService.MODULE, pprov);
+ invmgr.registerProvider(MODULE_NAME, pprov);
+ }
+
+ /**
+ * Issues an invitation from the inviter to the
+ * invitee for a game as described by the supplied config
+ * object.
+ *
+ * @param inviter the player initiating the invitation.
+ * @param invitee the player being invited.
+ * @param config the configuration of the game being proposed.
+ *
+ * @return the SUCCESS constant if the invitation was
+ * accepted and delivered, or a string describing the reason for
+ * failure if it was rejected.
+ */
+ public String invite (BodyObject inviter, BodyObject invitee,
+ GameConfig config)
+ {
+ return SUCCESS;
}
}
diff --git a/src/java/com/threerings/parlor/server/ParlorProvider.java b/src/java/com/threerings/parlor/server/ParlorProvider.java
index f8405d153..3063ef001 100644
--- a/src/java/com/threerings/parlor/server/ParlorProvider.java
+++ b/src/java/com/threerings/parlor/server/ParlorProvider.java
@@ -1,11 +1,13 @@
//
-// $Id: ParlorProvider.java,v 1.2 2001/10/01 05:07:13 mdb Exp $
+// $Id: ParlorProvider.java,v 1.3 2001/10/01 22:17:34 mdb Exp $
package com.threerings.parlor.server;
import com.threerings.cocktail.cher.server.InvocationProvider;
import com.threerings.cocktail.party.data.BodyObject;
+import com.threerings.cocktail.party.server.PartyServer;
+import com.threerings.parlor.client.ParlorCodes;
import com.threerings.parlor.data.GameConfig;
/**
@@ -13,7 +15,8 @@ import com.threerings.parlor.data.GameConfig;
* services that are made available for direct invocation by the client.
* Primarily these are the matchmaking mechanisms.
*/
-public class ParlorProvider extends InvocationProvider
+public class ParlorProvider
+ extends InvocationProvider implements ParlorCodes
{
/**
* Constructs a parlor provider instance which will be used to handle
@@ -36,6 +39,25 @@ public class ParlorProvider extends InvocationProvider
public void handleInviteRequest (
BodyObject source, int invid, String invitee, GameConfig config)
{
+ String rsp = null;
+
+ // ensure that the invitee is online at present
+ BodyObject target = PartyServer.lookupBody(invitee);
+ if (target == null) {
+ rsp = "m.not_online\t" + invitee;
+
+ } else {
+ // if they are, submit the invite request to the parlor
+ // manager
+ rsp = _pmgr.invite(source, target, config);
+ }
+
+ // now send the response
+ if (rsp.equals(SUCCESS)) {
+ sendResponse(source, invid, "InviteReceived");
+ } else {
+ sendResponse(source, invid, "InviteReceived");
+ }
}
/**