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; package com.threerings.whirled.server;
@@ -38,7 +38,9 @@ public class SceneManager extends PlaceManager
protected void didStartup () protected void didStartup ()
{ {
super.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 // register a chat message handler because we want to support
// chatting // chatting
@@ -46,6 +48,18 @@ public class SceneManager extends PlaceManager
registerMessageHandler(ChatService.SPEAK_REQUEST, handler); 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) protected void toString (StringBuffer buf)
{ {
super.toString(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; 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) protected void processSuccessfulResolution (Scene scene)
{ {
// now that the scene is loaded, we can create a scene manager for // 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) protected void processFailedResolution (int sceneId, Exception cause)
{ {
// alas things didn't work out, notify our penders // 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 // register this scene manager in our table
int sceneId = scmgr.getScene().getId(); int sceneId = scmgr.getScene().getId();
@@ -222,17 +232,15 @@ public class SceneRegistry
} }
/** /**
* Called when a place is destroyed. We clean up our extra scene * Called by the scene manager when it is shut down.
* information here.
*/ */
protected void placeWasDestroyed (PlaceManager pmgr) protected void unmapSceneManager (SceneManager scmgr)
{ {
super.placeWasDestroyed(pmgr); if (_scenemgrs.remove(scmgr.getScene().getId()) == null) {
Log.warning("Requested to unmap unmapped scene manager " +
// if this is a scene manager, remove it from our scene table "[scmgr=" + scmgr + "].");
if (pmgr instanceof SceneManager) { } else {
SceneManager scmgr = (SceneManager)pmgr; Log.info("Unmapped scene manager " + scmgr + ".");
_scenemgrs.remove(scmgr.getScene().getId());
} }
} }