From a2f4a2cb7a2cebd685b212d1dd2634924b16f544 Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Mon, 1 Oct 2001 22:17:34 +0000 Subject: [PATCH] Moved parlor invocation service codes into ParlorCodes. Started work on server side of parlor invocation services. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@370 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../threerings/parlor/client/ParlorCodes.java | 36 +++++++++++++++++++ .../parlor/client/ParlorDirector.java | 26 +++++++------- .../parlor/client/ParlorService.java | 35 ++++-------------- .../threerings/parlor/game/GameConfig.java | 4 +-- .../parlor/server/ParlorManager.java | 29 +++++++++++++-- .../parlor/server/ParlorProvider.java | 26 ++++++++++++-- 6 files changed, 106 insertions(+), 50 deletions(-) create mode 100644 src/java/com/threerings/parlor/client/ParlorCodes.java 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"); + } } /**