From 77a9438c69401a0a6f4bcafc1d278e1d881c12d0 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Sat, 7 May 2005 01:17:49 +0000 Subject: [PATCH] Check the size of the hand to make sure the request isn't for an earlier trick. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3545 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../parlor/card/trick/client/TrickCardGameService.java | 4 +++- .../parlor/card/trick/data/TrickCardGameMarshaller.java | 4 ++-- .../card/trick/server/TrickCardGameDispatcher.java | 2 +- .../card/trick/server/TrickCardGameManagerDelegate.java | 9 +++++++-- .../parlor/card/trick/server/TrickCardGameProvider.java | 6 ++++-- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/java/com/threerings/parlor/card/trick/client/TrickCardGameService.java b/src/java/com/threerings/parlor/card/trick/client/TrickCardGameService.java index 7e5ecbe6b..1cc9a7583 100644 --- a/src/java/com/threerings/parlor/card/trick/client/TrickCardGameService.java +++ b/src/java/com/threerings/parlor/card/trick/client/TrickCardGameService.java @@ -27,8 +27,10 @@ public interface TrickCardGameService extends InvocationService * * @param client the client object * @param card the card to play + * @param handSize the size of the player's hand, which is used to verify + * that the request is for the current trick */ - public void playCard (Client client, Card card); + public void playCard (Client client, Card card, int handSize); /** * A request for a rematch. diff --git a/src/java/com/threerings/parlor/card/trick/data/TrickCardGameMarshaller.java b/src/java/com/threerings/parlor/card/trick/data/TrickCardGameMarshaller.java index 8c20b4bba..e8b14cf21 100644 --- a/src/java/com/threerings/parlor/card/trick/data/TrickCardGameMarshaller.java +++ b/src/java/com/threerings/parlor/card/trick/data/TrickCardGameMarshaller.java @@ -41,10 +41,10 @@ public class TrickCardGameMarshaller extends InvocationMarshaller public static final int PLAY_CARD = 1; // documentation inherited from interface - public void playCard (Client arg1, Card arg2) + public void playCard (Client arg1, Card arg2, int arg3) { sendRequest(arg1, PLAY_CARD, new Object[] { - arg2 + arg2, new Integer(arg3) }); } diff --git a/src/java/com/threerings/parlor/card/trick/server/TrickCardGameDispatcher.java b/src/java/com/threerings/parlor/card/trick/server/TrickCardGameDispatcher.java index 7bf1aef35..cc5531cdc 100644 --- a/src/java/com/threerings/parlor/card/trick/server/TrickCardGameDispatcher.java +++ b/src/java/com/threerings/parlor/card/trick/server/TrickCardGameDispatcher.java @@ -59,7 +59,7 @@ public class TrickCardGameDispatcher extends InvocationDispatcher case TrickCardGameMarshaller.PLAY_CARD: ((TrickCardGameProvider)provider).playCard( source, - (Card)args[0] + (Card)args[0], ((Integer)args[1]).intValue() ); return; diff --git a/src/java/com/threerings/parlor/card/trick/server/TrickCardGameManagerDelegate.java b/src/java/com/threerings/parlor/card/trick/server/TrickCardGameManagerDelegate.java index 25e414442..d398c7550 100644 --- a/src/java/com/threerings/parlor/card/trick/server/TrickCardGameManagerDelegate.java +++ b/src/java/com/threerings/parlor/card/trick/server/TrickCardGameManagerDelegate.java @@ -259,7 +259,7 @@ public class TrickCardGameManagerDelegate extends TurnGameManagerDelegate } // Documentation inherited. - public void playCard (ClientObject client, Card card) + public void playCard (ClientObject client, Card card, int handSize) { // make sure we're playing a trick if (_trickCardGame.getTrickState() != @@ -273,8 +273,13 @@ public class TrickCardGameManagerDelegate extends TurnGameManagerDelegate return; } - // make sure their hand contains the specified card + // make sure they're on the right trick int pidx = _cardGame.getPlayerIndex(username); + if (_hands[pidx].size() != handSize) { + return; + } + + // make sure their hand contains the specified card if (!_hands[pidx].contains(card)) { Log.warning("Tried to play card not held [username=" + username + ", card=" + card + "]."); diff --git a/src/java/com/threerings/parlor/card/trick/server/TrickCardGameProvider.java b/src/java/com/threerings/parlor/card/trick/server/TrickCardGameProvider.java index 680116a55..f284ca322 100644 --- a/src/java/com/threerings/parlor/card/trick/server/TrickCardGameProvider.java +++ b/src/java/com/threerings/parlor/card/trick/server/TrickCardGameProvider.java @@ -29,9 +29,11 @@ public interface TrickCardGameProvider extends InvocationProvider * * @param client the client object * @param card the card to play + * @param handSize the size of the player's hand, which is used to verify + * that the request is for the current trick */ - public void playCard (ClientObject client, Card card); - + public void playCard (ClientObject client, Card card, int handSize); + /** * Processes a request for a rematch. *