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:
@@ -22,6 +22,7 @@
|
||||
package com.threerings.parlor.client {
|
||||
|
||||
import com.threerings.util.ArrayUtil;
|
||||
import com.threerings.util.ObserverList;
|
||||
|
||||
import com.threerings.presents.client.BasicDirector;
|
||||
import com.threerings.presents.client.Client;
|
||||
@@ -121,7 +122,7 @@ public class TableDirector extends BasicDirector
|
||||
*/
|
||||
public function addSeatednessObserver (observer :SeatednessObserver) :void
|
||||
{
|
||||
_seatedObservers.push(observer);
|
||||
_seatedObservers.add(observer);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -132,7 +133,7 @@ public class TableDirector extends BasicDirector
|
||||
public function removeSeatednessObserver (
|
||||
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
|
||||
{
|
||||
var slength :int = _seatedObservers.length;
|
||||
for (var ii :int = 0; ii < slength; ii++) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
_seatedObservers.apply(function (so :SeatednessObserver) :void {
|
||||
so.seatednessDidChange(isSeated);
|
||||
});
|
||||
}
|
||||
|
||||
/** 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
|
||||
* sit down. */
|
||||
protected var _seatedObservers :Array = new Array();
|
||||
protected var _seatedObservers :ObserverList = new ObserverList();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,9 +21,8 @@
|
||||
|
||||
package com.threerings.parlor.client;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.samskivert.util.ListUtil;
|
||||
import com.samskivert.util.ObserverList;
|
||||
|
||||
import com.threerings.presents.client.BasicDirector;
|
||||
import com.threerings.presents.client.Client;
|
||||
@@ -322,20 +321,15 @@ public class TableDirector extends BasicDirector
|
||||
/**
|
||||
* Notifies the seatedness observers of a seatedness change.
|
||||
*/
|
||||
protected void notifySeatedness (boolean isSeated)
|
||||
protected void notifySeatedness (final boolean isSeated)
|
||||
{
|
||||
int slength = _seatedObservers.size();
|
||||
for (int i = 0; i < slength; i++) {
|
||||
SeatednessObserver observer = (SeatednessObserver)
|
||||
_seatedObservers.get(i);
|
||||
try {
|
||||
observer.seatednessDidChange(isSeated);
|
||||
} catch (Exception e) {
|
||||
Log.warning("Observer choked in seatednessDidChange() " +
|
||||
"[observer=" + observer + "].");
|
||||
Log.logStackTrace(e);
|
||||
}
|
||||
_seatedObservers.apply(
|
||||
new ObserverList.ObserverOp<SeatednessObserver>() {
|
||||
public boolean apply (SeatednessObserver so) {
|
||||
so.seatednessDidChange(isSeated);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/** 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
|
||||
* sit down. */
|
||||
protected ArrayList _seatedObservers = new ArrayList();
|
||||
protected ObserverList<SeatednessObserver> _seatedObservers =
|
||||
new ObserverList<SeatednessObserver>(ObserverList.FAST_UNSAFE_NOTIFY);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user