Implement these listeners in helper classes rather than in ourselves where they

become undesirably part of our public interface.


git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@5485 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Michael Bayne
2008-10-31 17:33:26 +00:00
parent 7d4a594929
commit a3e74276f5
@@ -75,7 +75,7 @@ import static com.threerings.crowd.Log.log;
* well as through event listeners. * well as through event listeners.
*/ */
public class PlaceManager public class PlaceManager
implements MessageListener, OidListListener, ObjectDeathListener, SpeakHandler.SpeakerValidator implements MessageListener, SpeakHandler.SpeakerValidator
{ {
/** /**
* An interface used to allow the registration of standard message handlers to be invoked by * An interface used to allow the registration of standard message handlers to be invoked by
@@ -269,6 +269,8 @@ public class PlaceManager
// we'll need to hear about place object events // we'll need to hear about place object events
plobj.addListener(this); plobj.addListener(this);
plobj.addListener(_bodyUpdater); plobj.addListener(_bodyUpdater);
plobj.addListener(_occListener);
plobj.addListener(_deathListener);
// configure this place's access controller // configure this place's access controller
plobj.setAccessController(getAccessController()); plobj.setAccessController(getAccessController());
@@ -401,36 +403,6 @@ public class PlaceManager
} }
} }
// from interface OidListListener
public void objectAdded (ObjectAddedEvent event)
{
if (event.getName().equals(PlaceObject.OCCUPANTS)) {
bodyEntered(event.getOid());
}
}
// from interface OidListListener
public void objectRemoved (ObjectRemovedEvent event)
{
if (event.getName().equals(PlaceObject.OCCUPANTS)) {
bodyLeft(event.getOid());
}
}
// from interface ObjectDeathListener
public void objectDestroyed (ObjectDestroyedEvent event)
{
// unregister ourselves
_registry.unmapPlaceManager(this);
// let our derived classes and delegates shut themselves down
try {
didShutdown();
} catch (Throwable t) {
log.warning("Manager choked in didShutdown()", "where", where(), t);
}
}
// documentation inherited from interface // documentation inherited from interface
public boolean isValidSpeaker (DObject speakObj, ClientObject speaker, byte mode) public boolean isValidSpeaker (DObject speakObj, ClientObject speaker, byte mode)
{ {
@@ -556,6 +528,8 @@ public class PlaceManager
// clear out our listenership // clear out our listenership
_plobj.removeListener(this); _plobj.removeListener(this);
_plobj.removeListener(_bodyUpdater); _plobj.removeListener(_bodyUpdater);
_plobj.removeListener(_occListener);
_plobj.removeListener(_deathListener);
// let our delegates know that we've shut down // let our delegates know that we've shut down
applyToDelegates(new DelegateOp(PlaceManagerDelegate.class) { applyToDelegates(new DelegateOp(PlaceManagerDelegate.class) {
@@ -614,8 +588,7 @@ public class PlaceManager
// let our delegates know what's up // let our delegates know what's up
applyToDelegates(new DelegateOp(PlaceManagerDelegate.class) { applyToDelegates(new DelegateOp(PlaceManagerDelegate.class) {
@Override @Override public void apply (PlaceManagerDelegate delegate) {
public void apply (PlaceManagerDelegate delegate) {
delegate.bodyLeft(bodyOid); delegate.bodyLeft(bodyOid);
} }
}); });
@@ -728,6 +701,35 @@ public class PlaceManager
} }
}; };
/** Listens for body entry and departure. */
protected OidListListener _occListener = new OidListListener() {
public void objectAdded (ObjectAddedEvent event) {
if (event.getName().equals(PlaceObject.OCCUPANTS)) {
bodyEntered(event.getOid());
}
}
public void objectRemoved (ObjectRemovedEvent event) {
if (event.getName().equals(PlaceObject.OCCUPANTS)) {
bodyLeft(event.getOid());
}
}
};
/** Listens for death of our place object. */
protected ObjectDeathListener _deathListener = new ObjectDeathListener() {
public void objectDestroyed (ObjectDestroyedEvent event) {
// unregister ourselves
_registry.unmapPlaceManager(PlaceManager.this);
// let our derived classes and delegates shut themselves down
try {
didShutdown();
} catch (Throwable t) {
log.warning("Manager choked in didShutdown()", "where", where(), t);
}
}
};
/** A reference to the place registry with which we're registered. */ /** A reference to the place registry with which we're registered. */
protected PlaceRegistry _registry; protected PlaceRegistry _registry;