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:
@@ -75,7 +75,7 @@ import static com.threerings.crowd.Log.log;
|
||||
* well as through event listeners.
|
||||
*/
|
||||
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
|
||||
@@ -269,6 +269,8 @@ public class PlaceManager
|
||||
// we'll need to hear about place object events
|
||||
plobj.addListener(this);
|
||||
plobj.addListener(_bodyUpdater);
|
||||
plobj.addListener(_occListener);
|
||||
plobj.addListener(_deathListener);
|
||||
|
||||
// configure this place's access controller
|
||||
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
|
||||
public boolean isValidSpeaker (DObject speakObj, ClientObject speaker, byte mode)
|
||||
{
|
||||
@@ -556,6 +528,8 @@ public class PlaceManager
|
||||
// clear out our listenership
|
||||
_plobj.removeListener(this);
|
||||
_plobj.removeListener(_bodyUpdater);
|
||||
_plobj.removeListener(_occListener);
|
||||
_plobj.removeListener(_deathListener);
|
||||
|
||||
// let our delegates know that we've shut down
|
||||
applyToDelegates(new DelegateOp(PlaceManagerDelegate.class) {
|
||||
@@ -614,8 +588,7 @@ public class PlaceManager
|
||||
|
||||
// let our delegates know what's up
|
||||
applyToDelegates(new DelegateOp(PlaceManagerDelegate.class) {
|
||||
@Override
|
||||
public void apply (PlaceManagerDelegate delegate) {
|
||||
@Override public void apply (PlaceManagerDelegate delegate) {
|
||||
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. */
|
||||
protected PlaceRegistry _registry;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user