When a scene update is received while in the scene, apply it immediately
and also save the new updated model. git-svn-id: svn+ssh://src.earth.threerings.net/vilya/trunk@19 c613c5cb-e716-0410-b11b-feb51c14d237
This commit is contained in:
@@ -71,12 +71,7 @@ public /*abstract*/ class SceneController extends PlaceController
|
|||||||
protected function sceneUpdated (update :SceneUpdate) :void
|
protected function sceneUpdated (update :SceneUpdate) :void
|
||||||
{
|
{
|
||||||
// apply the update to the scene
|
// apply the update to the scene
|
||||||
_wctx.getSceneDirector().getScene().updateReceived(update);
|
_wctx.getSceneDirector().updateReceived(update);
|
||||||
|
|
||||||
// we don't persistify these updates in this circumstance, but
|
|
||||||
// next time we come to this scene we'll redownload the update and
|
|
||||||
// apply it to the repository; as the updates are meant to be very
|
|
||||||
// small, this shouldn't be horribly less efficient
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Used to listen for scene updates. */
|
/** Used to listen for scene updates. */
|
||||||
|
|||||||
@@ -305,13 +305,7 @@ public class SceneDirector extends BasicDirector
|
|||||||
}
|
}
|
||||||
|
|
||||||
// store the updated scene in the repository
|
// store the updated scene in the repository
|
||||||
try {
|
persistSceneModel(model);
|
||||||
_screp.storeSceneModel(model);
|
|
||||||
} catch (ioe :IOError) {
|
|
||||||
log.warning("Failed to update repository with updated scene " +
|
|
||||||
"[sceneId=" + model.sceneId + "].");
|
|
||||||
log.logStackTrace(ioe);
|
|
||||||
}
|
|
||||||
|
|
||||||
// finally pass through to the normal success handler
|
// finally pass through to the normal success handler
|
||||||
moveSucceeded(placeId, config);
|
moveSucceeded(placeId, config);
|
||||||
@@ -326,14 +320,7 @@ public class SceneDirector extends BasicDirector
|
|||||||
model.name + "/" + model.version + "].");
|
model.name + "/" + model.version + "].");
|
||||||
|
|
||||||
// update the model in the repository
|
// update the model in the repository
|
||||||
try {
|
persistSceneModel(model);
|
||||||
_screp.storeSceneModel(model);
|
|
||||||
} catch (ioe :IOError) {
|
|
||||||
log.warning("Failed to update repository with new version " +
|
|
||||||
"[sceneId=" + model.sceneId +
|
|
||||||
", nvers=" + model.version + "].");
|
|
||||||
log.logStackTrace(ioe);
|
|
||||||
}
|
|
||||||
|
|
||||||
// update our scene cache
|
// update our scene cache
|
||||||
_scache.put(model.sceneId, model);
|
_scache.put(model.sceneId, model);
|
||||||
@@ -353,6 +340,16 @@ public class SceneDirector extends BasicDirector
|
|||||||
_locdir.failedToMoveTo(sceneId, reason);
|
_locdir.failedToMoveTo(sceneId, reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by SceneController instances to tell us about an update
|
||||||
|
* to the current scene.
|
||||||
|
*/
|
||||||
|
public function updateReceived (update :SceneUpdate) :void
|
||||||
|
{
|
||||||
|
_scene.updateReceived(update);
|
||||||
|
persistSceneModel(_scene.getSceneModel());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called to clean up our place and scene state information when we
|
* Called to clean up our place and scene state information when we
|
||||||
* leave a scene.
|
* leave a scene.
|
||||||
@@ -462,6 +459,20 @@ public class SceneDirector extends BasicDirector
|
|||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Persist the scene model to the clientside persistant cache.
|
||||||
|
*/
|
||||||
|
protected function persistSceneModel (model :SceneModel) :void
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
_screp.storeSceneModel(model);
|
||||||
|
} catch (ioe :IOError) {
|
||||||
|
log.warning("Failed to update repository with updated scene " +
|
||||||
|
"[sceneId=" + model.sceneId + "].");
|
||||||
|
log.logStackTrace(ioe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// documentation inherited
|
// documentation inherited
|
||||||
override public function clientDidLogoff (event :ClientEvent) :void
|
override public function clientDidLogoff (event :ClientEvent) :void
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -70,12 +70,7 @@ public abstract class SceneController extends PlaceController
|
|||||||
protected void sceneUpdated (SceneUpdate update)
|
protected void sceneUpdated (SceneUpdate update)
|
||||||
{
|
{
|
||||||
// apply the update to the scene
|
// apply the update to the scene
|
||||||
_wctx.getSceneDirector().getScene().updateReceived(update);
|
_wctx.getSceneDirector().updateReceived(update);
|
||||||
|
|
||||||
// we don't persistify these updates in this circumstance, but
|
|
||||||
// next time we come to this scene we'll redownload the update and
|
|
||||||
// apply it to the repository; as the updates are meant to be very
|
|
||||||
// small, this shouldn't be horribly less efficient
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Used to listen for scene updates. */
|
/** Used to listen for scene updates. */
|
||||||
|
|||||||
@@ -309,14 +309,8 @@ public class SceneDirector extends BasicDirector
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// store the updated scene in the repository
|
// store the updated version
|
||||||
try {
|
persistSceneModel(model);
|
||||||
_screp.storeSceneModel(model);
|
|
||||||
} catch (IOException ioe) {
|
|
||||||
Log.warning("Failed to update repository with updated scene " +
|
|
||||||
"[sceneId=" + model.sceneId + "].");
|
|
||||||
Log.logStackTrace(ioe);
|
|
||||||
}
|
|
||||||
|
|
||||||
// finally pass through to the normal success handler
|
// finally pass through to the normal success handler
|
||||||
moveSucceeded(placeId, config);
|
moveSucceeded(placeId, config);
|
||||||
@@ -331,14 +325,7 @@ public class SceneDirector extends BasicDirector
|
|||||||
model.name + "/" + model.version + "].");
|
model.name + "/" + model.version + "].");
|
||||||
|
|
||||||
// update the model in the repository
|
// update the model in the repository
|
||||||
try {
|
persistSceneModel(model);
|
||||||
_screp.storeSceneModel(model);
|
|
||||||
} catch (IOException ioe) {
|
|
||||||
Log.warning("Failed to update repository with new version " +
|
|
||||||
"[sceneId=" + model.sceneId +
|
|
||||||
", nvers=" + model.version + "].");
|
|
||||||
Log.logStackTrace(ioe);
|
|
||||||
}
|
|
||||||
|
|
||||||
// update our scene cache
|
// update our scene cache
|
||||||
_scache.put(Integer.valueOf(model.sceneId), model);
|
_scache.put(Integer.valueOf(model.sceneId), model);
|
||||||
@@ -358,6 +345,16 @@ public class SceneDirector extends BasicDirector
|
|||||||
_locdir.failedToMoveTo(sceneId, reason);
|
_locdir.failedToMoveTo(sceneId, reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by SceneController instances to tell us about an update
|
||||||
|
* to the current scene.
|
||||||
|
*/
|
||||||
|
public void updateReceived (SceneUpdate update)
|
||||||
|
{
|
||||||
|
_scene.updateReceived(update);
|
||||||
|
persistSceneModel(_scene.getSceneModel());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called to clean up our place and scene state information when we
|
* Called to clean up our place and scene state information when we
|
||||||
* leave a scene.
|
* leave a scene.
|
||||||
@@ -468,6 +465,21 @@ public class SceneDirector extends BasicDirector
|
|||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Persist the scene model to the clientside persistant cache.
|
||||||
|
*/
|
||||||
|
protected void persistSceneModel (SceneModel model)
|
||||||
|
{
|
||||||
|
// store the updated scene in the repository
|
||||||
|
try {
|
||||||
|
_screp.storeSceneModel(model);
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
Log.warning("Failed to update repository with updated scene " +
|
||||||
|
"[sceneId=" + model.sceneId + "].");
|
||||||
|
Log.logStackTrace(ioe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// documentation inherited from interface
|
// documentation inherited from interface
|
||||||
public void clientDidLogoff (Client client)
|
public void clientDidLogoff (Client client)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user