67492e13f0
a) use an ObserverList in SAFE_IN_ORDER_NOTIFY mode which circumnavigates any funny business like observers being added or removed while we're notifying the observers. b) require that the clients be notified on the main client thread (generally the AWT thread) by using the invoker; we had a problem previously where clientDidLogoff() was being called by the communicator's writer thread which caused all hell to break loose because everything outside the client networking layer depends on running on the same thread. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@1422 542714f4-19e9-0310-aa3c-eee0fc999fb1