Match the Java side's cleanup functionality. This also helps Flash garbage collect properly.

git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6752 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Par Winzell
2011-12-07 22:39:28 +00:00
parent 966d91fbcd
commit d3c34a4a72
2 changed files with 26 additions and 0 deletions
@@ -537,6 +537,11 @@ public class Client extends EventDispatcher
internal function cleanup (logonError :Error) :void internal function cleanup (logonError :Error) :void
{ {
// tell the object manager that we're no longer connected to the server
if (_omgr is ClientDObjectMgr) {
ClientDObjectMgr(_omgr).cleanup();
}
// clear out our references // clear out our references
_comm = null; _comm = null;
_bstrap = null; _bstrap = null;
@@ -80,6 +80,27 @@ public class ClientDObjectMgr
_flushInterval.start(); _flushInterval.start();
} }
/**
* Called when the client is cleaned up due to having disconnected from the server.
*/
public function cleanup () :void
{
// tell any pending object subscribers that they're not getting their bits
for each (var req :PendingRequest in _penders.values()) {
for each (var sub :Subscriber in req.targets) {
sub.requestFailed(req.oid, new ObjectAccessError("Client connection closed"));
}
}
_penders.clear();
_flushes.clear();
_dead.clear();
_ocache.clear();
_flushInterval.stop();
_flushInterval.removeEventListener(TimerEvent.TIMER, flushObjects);
_flushInterval = null;
}
// documentation inherited from interface DObjectManager // documentation inherited from interface DObjectManager
public function isManager (object :DObject) :Boolean public function isManager (object :DObject) :Boolean
{ {