Use an observer list.

git-svn-id: svn+ssh://src.earth.threerings.net/vilya/trunk@73 c613c5cb-e716-0410-b11b-feb51c14d237
This commit is contained in:
Ray Greenwell
2006-09-18 21:43:18 +00:00
parent 62dc95dbf9
commit 8647002b71
2 changed files with 18 additions and 31 deletions
@@ -22,6 +22,7 @@
package com.threerings.parlor.client { package com.threerings.parlor.client {
import com.threerings.util.ArrayUtil; import com.threerings.util.ArrayUtil;
import com.threerings.util.ObserverList;
import com.threerings.presents.client.BasicDirector; import com.threerings.presents.client.BasicDirector;
import com.threerings.presents.client.Client; import com.threerings.presents.client.Client;
@@ -121,7 +122,7 @@ public class TableDirector extends BasicDirector
*/ */
public function addSeatednessObserver (observer :SeatednessObserver) :void public function addSeatednessObserver (observer :SeatednessObserver) :void
{ {
_seatedObservers.push(observer); _seatedObservers.add(observer);
} }
/** /**
@@ -132,7 +133,7 @@ public class TableDirector extends BasicDirector
public function removeSeatednessObserver ( public function removeSeatednessObserver (
observer :SeatednessObserver) :void observer :SeatednessObserver) :void
{ {
ArrayUtil.removeFirst(_seatedObservers, observer); _seatedObservers.remove(observer);
} }
/** /**
@@ -327,18 +328,9 @@ public class TableDirector extends BasicDirector
*/ */
protected function notifySeatedness (isSeated :Boolean) :void protected function notifySeatedness (isSeated :Boolean) :void
{ {
var slength :int = _seatedObservers.length; _seatedObservers.apply(function (so :SeatednessObserver) :void {
for (var ii :int = 0; ii < slength; ii++) { so.seatednessDidChange(isSeated);
var observer :SeatednessObserver = });
(_seatedObservers[ii] as SeatednessObserver);
try {
observer.seatednessDidChange(isSeated);
} catch (err :Error) {
log.warning("Observer choked in seatednessDidChange() " +
"[observer=" + observer + "].");
log.logStackTrace(err);
}
}
} }
/** A context by which we can access necessary client services. */ /** A context by which we can access necessary client services. */
@@ -361,6 +353,6 @@ public class TableDirector extends BasicDirector
/** An array of entities that want to hear about when we stand up or /** An array of entities that want to hear about when we stand up or
* sit down. */ * sit down. */
protected var _seatedObservers :Array = new Array(); protected var _seatedObservers :ObserverList = new ObserverList();
} }
} }
@@ -21,9 +21,8 @@
package com.threerings.parlor.client; package com.threerings.parlor.client;
import java.util.ArrayList;
import com.samskivert.util.ListUtil; import com.samskivert.util.ListUtil;
import com.samskivert.util.ObserverList;
import com.threerings.presents.client.BasicDirector; import com.threerings.presents.client.BasicDirector;
import com.threerings.presents.client.Client; import com.threerings.presents.client.Client;
@@ -322,20 +321,15 @@ public class TableDirector extends BasicDirector
/** /**
* Notifies the seatedness observers of a seatedness change. * Notifies the seatedness observers of a seatedness change.
*/ */
protected void notifySeatedness (boolean isSeated) protected void notifySeatedness (final boolean isSeated)
{ {
int slength = _seatedObservers.size(); _seatedObservers.apply(
for (int i = 0; i < slength; i++) { new ObserverList.ObserverOp<SeatednessObserver>() {
SeatednessObserver observer = (SeatednessObserver) public boolean apply (SeatednessObserver so) {
_seatedObservers.get(i); so.seatednessDidChange(isSeated);
try { return true;
observer.seatednessDidChange(isSeated);
} catch (Exception e) {
Log.warning("Observer choked in seatednessDidChange() " +
"[observer=" + observer + "].");
Log.logStackTrace(e);
}
} }
});
} }
/** A context by which we can access necessary client services. */ /** A context by which we can access necessary client services. */
@@ -358,5 +352,6 @@ public class TableDirector extends BasicDirector
/** An array of entities that want to hear about when we stand up or /** An array of entities that want to hear about when we stand up or
* sit down. */ * sit down. */
protected ArrayList _seatedObservers = new ArrayList(); protected ObserverList<SeatednessObserver> _seatedObservers =
new ObserverList<SeatednessObserver>(ObserverList.FAST_UNSAFE_NOTIFY);
} }