Scene manager now follows place manager example in requesting an unmap

from the scene registry during its shutdown process.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@545 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Michael Bayne
2001-10-24 00:58:12 +00:00
parent ac62348afc
commit 75327a0b40
2 changed files with 35 additions and 13 deletions
@@ -1,5 +1,5 @@
//
// $Id: SceneManager.java,v 1.6 2001/10/11 04:07:54 mdb Exp $
// $Id: SceneManager.java,v 1.7 2001/10/24 00:58:12 mdb Exp $
package com.threerings.whirled.server;
@@ -38,7 +38,9 @@ public class SceneManager extends PlaceManager
protected void didStartup ()
{
super.didStartup();
_screg.sceneManagerDidInit(this);
// let the scene registry know that we're up and running
_screg.sceneManagerDidStart(this);
// register a chat message handler because we want to support
// chatting
@@ -46,6 +48,18 @@ public class SceneManager extends PlaceManager
registerMessageHandler(ChatService.SPEAK_REQUEST, handler);
}
/**
* Called when we have shutdown.
*/
protected void didShutdown ()
{
super.didShutdown();
// unregister ourselves with the scene registry
_screg.unmapSceneManager(this);
}
// documentation inherited
protected void toString (StringBuffer buf)
{
super.toString(buf);
@@ -1,5 +1,5 @@
//
// $Id: SceneRegistry.java,v 1.7 2001/10/24 00:38:54 mdb Exp $
// $Id: SceneRegistry.java,v 1.8 2001/10/24 00:58:12 mdb Exp $
package com.threerings.whirled.server;
@@ -153,6 +153,9 @@ public class SceneRegistry
}
}
/**
* Called when the scene resolution has completed successfully.
*/
protected void processSuccessfulResolution (Scene scene)
{
// now that the scene is loaded, we can create a scene manager for
@@ -180,6 +183,9 @@ public class SceneRegistry
}
}
/**
* Called if resolving the scene fails for some reason.
*/
protected void processFailedResolution (int sceneId, Exception cause)
{
// alas things didn't work out, notify our penders
@@ -197,7 +203,11 @@ public class SceneRegistry
}
}
protected void sceneManagerDidInit (SceneManager scmgr)
/**
* Called by the scene manager once it has started up (meaning that it
* has its place object and is ready to roll).
*/
protected void sceneManagerDidStart (SceneManager scmgr)
{
// register this scene manager in our table
int sceneId = scmgr.getScene().getId();
@@ -222,17 +232,15 @@ public class SceneRegistry
}
/**
* Called when a place is destroyed. We clean up our extra scene
* information here.
* Called by the scene manager when it is shut down.
*/
protected void placeWasDestroyed (PlaceManager pmgr)
protected void unmapSceneManager (SceneManager scmgr)
{
super.placeWasDestroyed(pmgr);
// if this is a scene manager, remove it from our scene table
if (pmgr instanceof SceneManager) {
SceneManager scmgr = (SceneManager)pmgr;
_scenemgrs.remove(scmgr.getScene().getId());
if (_scenemgrs.remove(scmgr.getScene().getId()) == null) {
Log.warning("Requested to unmap unmapped scene manager " +
"[scmgr=" + scmgr + "].");
} else {
Log.info("Unmapped scene manager " + scmgr + ".");
}
}