From 576dfa2c859ab6c6ffa6e3f3ab47ddb3e984f1ef Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Thu, 15 Nov 2007 01:59:22 +0000 Subject: [PATCH] If a move fails and we're currently in a place, just stay where we are rather than trying to go to our previous place. If we're no longer in a place (like we switched servers to get where we're going), then we'll try to go back to our previous place. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4875 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../crowd/client/LocationDirector.java | 51 ++++++++----------- 1 file changed, 20 insertions(+), 31 deletions(-) diff --git a/src/java/com/threerings/crowd/client/LocationDirector.java b/src/java/com/threerings/crowd/client/LocationDirector.java index 7152c29d2..43c519825 100644 --- a/src/java/com/threerings/crowd/client/LocationDirector.java +++ b/src/java/com/threerings/crowd/client/LocationDirector.java @@ -51,7 +51,7 @@ import static com.threerings.crowd.Log.log; * actually issuing the request. */ public class LocationDirector extends BasicDirector - implements LocationCodes, LocationReceiver, LocationService.MoveListener + implements LocationCodes, LocationReceiver { /** * Used to recover from a moveTo request that was accepted but resulted in a failed attempt to @@ -159,7 +159,22 @@ public class LocationDirector extends BasicDirector // issue a moveTo request log.info("Issuing moveTo(" + placeId + ")."); - _lservice.moveTo(_ctx.getClient(), placeId, this); + _lservice.moveTo(_ctx.getClient(), placeId, new LocationService.MoveListener() { + public void moveSucceeded (PlaceConfig config) { + // handle the successful move + didMoveTo(_pendingPlaceId, config); + // and clear out the tracked pending oid + _pendingPlaceId = -1; + } + public void requestFailed (String reason) { + // clear out our pending request oid + int placeId = _pendingPlaceId; + _pendingPlaceId = -1; + log.info("moveTo failed [pid=" + placeId + ", reason=" + reason + "]."); + // let our observers know that something has gone horribly awry + handleFailure(placeId, reason); + } + }); return true; } @@ -461,29 +476,6 @@ public class LocationDirector extends BasicDirector // there straight away } - // documentation inherited from interface - public void moveSucceeded (PlaceConfig config) - { - // handle the successful move - didMoveTo(_pendingPlaceId, config); - - // and clear out the tracked pending oid - _pendingPlaceId = -1; - } - - // documentation inherited from interface - public void requestFailed (String reason) - { - // clear out our pending request oid - int placeId = _pendingPlaceId; - _pendingPlaceId = -1; - - log.info("moveTo failed [pid=" + placeId + ", reason=" + reason + "]."); - - // let our observers know that something has gone horribly awry - handleFailure(placeId, reason); - } - // documentation inherited from interface public void forcedMove (int placeId) { @@ -534,21 +526,18 @@ public class LocationDirector extends BasicDirector } }); - // we need to sort out what to do about the half-initialized place controller. presently we - // punt and hope that calling didLeavePlace() without ever having called willEnterPlace() - // does whatever's necessary - // try to return to our previous location if (_failureHandler != null) { _failureHandler.recoverFailedMove(placeId); - } else { + } else if (_placeId <= 0) { // if we were previously somewhere (and that somewhere isn't where we just tried to // go), try going back to that happy place if (_previousPlaceId != -1 && _previousPlaceId != placeId) { moveTo(_previousPlaceId); } - } + + } // else we're currently somewhere, so just stay there } /**