diff --git a/src/as/com/threerings/crowd/client/LocationDirector.as b/src/as/com/threerings/crowd/client/LocationDirector.as index 052c0ed5d..beb171c1e 100644 --- a/src/as/com/threerings/crowd/client/LocationDirector.as +++ b/src/as/com/threerings/crowd/client/LocationDirector.as @@ -43,11 +43,10 @@ import com.threerings.crowd.data.PlaceObject; import com.threerings.crowd.util.CrowdContext; /** - * The location director provides a means by which entities on the client - * can request to move from place to place and can be notified if other - * entities have caused the client to move to a new place. It also - * provides a mechanism for ratifying a request to move to a new place - * before actually issuing the request. + * The location director provides a means by which entities on the client can request to move from + * place to place and can be notified if other entities have caused the client to move to a new + * place. It also provides a mechanism for ratifying a request to move to a new place before + * actually issuing the request. */ public class LocationDirector extends BasicDirector implements Subscriber, LocationReceiver @@ -55,8 +54,8 @@ public class LocationDirector extends BasicDirector private static const log :Log = Log.getLog(LocationDirector); /** - * Constructs a location director which will configure itself for - * operation using the supplied context. + * Constructs a location director which will configure itself for operation using the supplied + * context. */ public function LocationDirector (ctx :CrowdContext) { @@ -71,9 +70,8 @@ public class LocationDirector extends BasicDirector } /** - * Adds a location observer to the list. This observer will - * subsequently be notified of potential, effected and failed location - * changes. + * Adds a location observer to the list. This observer will subsequently be notified of + * potential, effected and failed location changes. */ public function addLocationObserver (observer :LocationObserver) :void { @@ -89,14 +87,23 @@ public class LocationDirector extends BasicDirector } /** - * Returns the place object for the location we currently occupy or - * null if we're not currently occupying any location. + * Returns the place object for the location we currently occupy or null if we're not currently + * occupying any location. */ public function getPlaceObject () :PlaceObject { return _plobj; } + /** + * Returns the controller for the location we currently occupy or null if we're not currently + * occupying any location. + */ + public function getPlaceController () :PlaceController + { + return _controller; + } + /** * Returns true if there is a pending move request. */ @@ -106,13 +113,11 @@ public class LocationDirector extends BasicDirector } /** - * Requests that this client be moved to the specified place. A - * request will be made and when the response is received, the - * location observers will be notified of success or failure. + * Requests that this client be moved to the specified place. A request will be made and when + * the response is received, the location observers will be notified of success or failure. * - * @return true if the move to request was issued, false if it was - * rejected by a location observer or because we have another request - * outstanding. + * @return true if the move to request was issued, false if it was rejected by a location + * observer or because we have another request outstanding. */ public function moveTo (placeId :int) :Boolean { @@ -122,31 +127,26 @@ public class LocationDirector extends BasicDirector return false; } - // first check to see if our observers are happy with this move - // request + // first check to see if our observers are happy with this move request if (!mayMoveTo(placeId, null)) { return false; } - // we need to call this both to mark that we're issuing a move - // request and to check to see if the last issued request should - // be considered stale + // we need to call this both to mark that we're issuing a move request and to check to see + // if the last issued request should be considered stale var refuse :Boolean = checkRepeatMove(); // complain if we're over-writing a pending request if (_pendingPlaceId != -1) { - // if the pending request has been outstanding more than a - // minute, go ahead and let this new one through in an attempt - // to recover from dropped moveTo requests + // if the pending request has been outstanding more than a minute, go ahead and let + // this new one through in an attempt to recover from dropped moveTo requests if (refuse) { log.warning("Refusing moveTo; We have a request outstanding " + - "[ppid=" + _pendingPlaceId + - ", npid=" + placeId + "]."); + "[ppid=" + _pendingPlaceId + ", npid=" + placeId + "]."); return false; } else { - log.warning("Overriding stale moveTo request " + - "[ppid=" + _pendingPlaceId + + log.warning("Overriding stale moveTo request [ppid=" + _pendingPlaceId + ", npid=" + placeId + "]."); } } @@ -169,8 +169,7 @@ public class LocationDirector extends BasicDirector var placeId :int = _pendingPlaceId; _pendingPlaceId = -1; - log.info("moveTo failed [pid=" + placeId + - ", reason=" + reason + "]."); + log.info("moveTo failed [pid=" + placeId + ", reason=" + reason + "]."); // let our observers know that something has gone horribly awry notifyFailure(placeId, reason); @@ -178,17 +177,15 @@ public class LocationDirector extends BasicDirector // issue a moveTo request log.info("Issuing moveTo(" + placeId + ")."); - _lservice.moveTo(_cctx.getClient(), placeId, - new MoveAdapter(success, failure)); + _lservice.moveTo(_cctx.getClient(), placeId, new MoveAdapter(success, failure)); return true; } /** - * Requests to move to the room that we last occupied, if such a room - * exists. + * Requests to move to the room that we last occupied, if such a room exists. * - * @return true if we had a previous room and we requested to move to - * it, false if we had no previous room. + * @return true if we had a previous room and we requested to move to it, false if we had no + * previous room. */ public function moveBack () :Boolean { @@ -204,8 +201,8 @@ public class LocationDirector extends BasicDirector /** * Issues a request to leave our current location. * - * @return true if we were able to leave, false if we are in the - * middle of moving somewhere and can't yet leave. + * @return true if we were able to leave, false if we are in the middle of moving somewhere and + * can't yet leave. */ public function leavePlace () :Boolean { @@ -219,16 +216,15 @@ public class LocationDirector extends BasicDirector } /** - * This can be called by cooperating directors that need to coopt the - * moving process to extend it in some way or other. In such - * situations, they should call this method before moving to a new - * location to check to be sure that all of the registered location - * observers are amenable to a location change. + * This can be called by cooperating directors that need to coopt the moving process to extend + * it in some way or other. In such situations, they should call this method before moving to a + * new location to check to be sure that all of the registered location observers are amenable + * to a location change. * * @param placeId the place oid of our tentative new location. * - * @return true if everyone is happy with the move, false if it was - * vetoed by one of the location observers. + * @return true if everyone is happy with the move, false if it was vetoed by one of the + * location observers. */ public function mayMoveTo (placeId :int, rl :ResultListener) :Boolean { @@ -238,12 +234,11 @@ public class LocationDirector extends BasicDirector vetoed = vetoed || !lobs.locationMayChange(placeId); }); - // if we're actually going somewhere, let the controller know that - // we might be leaving + // if we're actually going somewhere, let the controller know that we might be leaving mayLeavePlace(); - // if we have a result listener, let it know if we failed - // or keep it for later if we're still going + // if we have a result listener, let it know if we failed or keep it for later if we're + // still going if (rl != null) { if (vetoed) { rl.requestFailed(new MoveVetoedError()); @@ -256,8 +251,7 @@ public class LocationDirector extends BasicDirector } /** - * Called to inform our controller that we may be leaving the current - * place. + * Called to inform our controller that we may be leaving the current place. */ protected function mayLeavePlace () :void { @@ -265,19 +259,17 @@ public class LocationDirector extends BasicDirector try { _controller.mayLeavePlace(_plobj); } catch (e :Error) { - log.warning("Place controller choked in " + - "mayLeavePlace [plobj=" + _plobj + "]."); + log.warning("Place controller choked in mayLeavePlace [plobj=" + _plobj + "]."); log.logStackTrace(e); } } } /** - * This can be called by cooperating directors that need to coopt the - * moving process to extend it in some way or other. In such - * situations, they will be responsible for receiving the successful - * move response and they should let the location director know that - * the move has been effected. + * This can be called by cooperating directors that need to coopt the moving process to extend + * it in some way or other. In such situations, they will be responsible for receiving the + * successful move response and they should let the location director know that the move has + * been effected. * * @param placeId the place oid of our new location. * @param config the configuration information for the new place. @@ -304,8 +296,7 @@ public class LocationDirector extends BasicDirector // check whether we should use a custom class loader _controller = config.createController(); if (_controller == null) { - log.warning("Place config returned null controller " + - "[config=" + config + "]."); + log.warning("Place config returned null controller [config=" + config + "]."); return; } _controller.init(_cctx, config); @@ -315,9 +306,8 @@ public class LocationDirector extends BasicDirector } /** - * Called when we're leaving our current location. Informs the - * location's controller that we're departing, unsubscribes from the - * location's place object, and clears out our internal place + * Called when we're leaving our current location. Informs the location's controller that we're + * departing, unsubscribes from the location's place object, and clears out our internal place * information. */ public function didLeavePlace () :void @@ -328,16 +318,14 @@ public class LocationDirector extends BasicDirector try { _controller.didLeavePlace(_plobj); } catch (e :Error) { - log.warning("Place controller choked in " + - "didLeavePlace [plobj=" + _plobj + "]."); + log.warning("Place controller choked in didLeavePlace [plobj=" + _plobj + "]."); log.logStackTrace(e); } _controller = null; } // unsubscribe from our old place object - _cctx.getDObjectManager().unsubscribeFromObject( - _plobj.getOid(), this); + _cctx.getDObjectManager().unsubscribeFromObject(_plobj.getOid(), this); _plobj = null; // and clear out the associated place id @@ -346,10 +334,9 @@ public class LocationDirector extends BasicDirector } /** - * This can be called by cooperating directors that need to coopt the - * moving process to extend it in some way or other. If the coopted - * move request fails, this failure can be propagated to the location - * observers if appropriate. + * This can be called by cooperating directors that need to coopt the moving process to extend + * it in some way or other. If the coopted move request fails, this failure can be propagated + * to the location observers if appropriate. * * @param placeId the place oid to which we failed to move. * @param reason the reason code given for failure. @@ -369,8 +356,8 @@ public class LocationDirector extends BasicDirector } /** - * Called to test and set a time stamp that we use to determine if a - * pending moveTo request is stale. + * Called to test and set a time stamp that we use to determine if a pending moveTo request is + * stale. */ public function checkRepeatMove () :Boolean { @@ -392,17 +379,14 @@ public class LocationDirector extends BasicDirector var success :Function = function (object :DObject) :void { gotBodyObject(object as BodyObject); }; - var failure :Function = function ( - oid :int, cause :ObjectAccessError) :void { - log.warning("Location director unable to fetch body " + - "object; all has gone horribly wrong" + - "[cause=" + cause + "]."); + var failure :Function = function (oid :int, cause :ObjectAccessError) :void { + log.warning("Location director unable to fetch body object; all has gone horribly " + + "wrong [cause=" + cause + "]."); }; var client :Client = event.getClient(); - var cloid :int = client.getClientOid(); - client.getDObjectManager().subscribeToObject(cloid, - new SubscriberAdapter(success, failure)); + client.getDObjectManager().subscribeToObject( + client.getClientOid(), new SubscriberAdapter(success, failure)); } // documentation inherited @@ -417,8 +401,8 @@ public class LocationDirector extends BasicDirector // let our observers know that we're no longer in a location _observers.apply(didChangeOp); - // clear out everything else (it's possible that we were logged - // off in the middle of a change location request) + // clear out everything else (it's possible that we were logged off in the middle of a + // change location request) _pendingPlaceId = -1; _previousPlaceId = -1; _lastRequestTime = 0; @@ -440,8 +424,8 @@ public class LocationDirector extends BasicDirector protected function gotBodyObject (clobj :BodyObject) :void { - // check to see if we are already in a location, in which case - // we'll want to be going there straight away + // check to see if we are already in a location, in which case we'll want to be going there + // straight away } // documentation inherited from interface @@ -470,8 +454,7 @@ public class LocationDirector extends BasicDirector try { _controller.willEnterPlace(_plobj); } catch (e :Error) { - log.warning("Controller choked in willEnterPlace " + - "[place=" + _plobj + "]."); + log.warning("Controller choked in willEnterPlace [place=" + _plobj + "]."); log.logStackTrace(e); } } @@ -483,10 +466,9 @@ public class LocationDirector extends BasicDirector // documentation inherited from interface Subscriber public function requestFailed (oid :int, cause :ObjectAccessError) :void { - // aiya! we were unable to fetch our new place object; something - // is badly wrong - log.warning("Aiya! Unable to fetch place object for new location " + - "[plid=" + oid + ", reason=" + cause + "]."); + // aiya! we were unable to fetch our new place object; something is badly wrong + log.warning("Aiya! Unable to fetch place object for new location [plid=" + oid + + ", reason=" + cause + "]."); // clear out our half initialized place info var placeId :int = _placeId; @@ -495,9 +477,8 @@ public class LocationDirector extends BasicDirector // let the kids know shit be fucked notifyFailure(placeId, "m.unable_to_fetch_place_object"); - // 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() + // 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 @@ -505,9 +486,8 @@ public class LocationDirector extends BasicDirector _failureHandler.recoverFailedMove(placeId); } else { - // if we were previously somewhere (and that somewhere isn't - // where we just tried to go), try going back to that happy - // place + // 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); } @@ -515,24 +495,20 @@ public class LocationDirector extends BasicDirector } /** - * Sets the failure handler which will recover from place object - * fetching failures. In the event that we are unable to fetch our - * place object after making a successful moveTo request, we attempt - * to rectify the failure by moving back to the last known working - * location. Because entites that cooperate with the location director - * may need to become involved in this failure recovery, we provide - * this interface whereby they can interject themseves into the + * Sets the failure handler which will recover from place object fetching failures. In the + * event that we are unable to fetch our place object after making a successful moveTo request, + * we attempt to rectify the failure by moving back to the last known working location. Because + * entites that cooperate with the location director may need to become involved in this + * failure recovery, we provide this interface whereby they can interject themseves into the * failure recovery process and do their own failure recovery. */ - public function setFailureHandler ( - handler :LocationDirector_FailureHandler) :void + public function setFailureHandler (handler :LocationDirector_FailureHandler) :void { if (_failureHandler != null) { - log.warning("Requested to set failure handler, but we've " + - "already got one. The conflicting entities will " + - "likely need to perform more sophisticated " + - "coordination to deal with failures. " + - "[old=" + _failureHandler + ", new=" + handler + "]."); + log.warning("Requested to set failure handler, but we've already got one. The " + + "conflicting entities will likely need to perform more sophisticated " + + "coordination to deal with failures. [old=" + _failureHandler + + ", new=" + handler + "]."); } else { _failureHandler = handler; @@ -561,8 +537,7 @@ public class LocationDirector extends BasicDirector protected var _lservice :LocationService; /** Our location observer list. */ - protected var _observers :ObserverList = - new ObserverList(ObserverList.SAFE_IN_ORDER_NOTIFY); + protected var _observers :ObserverList = new ObserverList(ObserverList.SAFE_IN_ORDER_NOTIFY); /** The oid of the place we currently occupy. */ protected var _placeId :int = -1; @@ -573,10 +548,8 @@ public class LocationDirector extends BasicDirector /** The place controller in effect for our current place. */ protected var _controller :PlaceController; - /** - * The oid of the place for which we have an outstanding moveTo - * request, or -1 if we have no outstanding request. - */ + /** The oid of the place for which we have an outstanding moveTo request, or -1 if we have no + * outstanding request. */ protected var _pendingPlaceId :int = -1; /** The oid of the place we previously occupied. */ @@ -585,16 +558,14 @@ public class LocationDirector extends BasicDirector /** The last time we requested a move to. */ protected var _lastRequestTime :Number; - /** The entity that deals when we fail to subscribe to a place - * object. */ + /** The entity that deals when we fail to subscribe to a place object. */ protected var _failureHandler :LocationDirector_FailureHandler; - /** A listener that wants to know if we succeeded or - * how we failed to move. */ + /** A listener that wants to know if we succeeded or how we failed to move. */ protected var _moveListener :ResultListener; - /** We require that a moveTo request be outstanding for one minute - * before it is declared to be stale. */ + /** We require that a moveTo request be outstanding for one minute before it is declared to be + * stale. */ protected static const STALE_REQUEST_DURATION :int = 60 * 1000; } }