From 5ae87258fa6ebaca72dd9b14b3d77eba46d0aa24 Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Tue, 13 Nov 2007 02:56:35 +0000 Subject: [PATCH] If we lose our connection, let anyone who had a pending subscription request outstanding know that their subscription request failed. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4873 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../com/threerings/presents/client/Client.java | 5 +++++ .../presents/client/ClientDObjectMgr.java | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/java/com/threerings/presents/client/Client.java b/src/java/com/threerings/presents/client/Client.java index d1edd1807..a8d1b000c 100644 --- a/src/java/com/threerings/presents/client/Client.java +++ b/src/java/com/threerings/presents/client/Client.java @@ -666,6 +666,11 @@ public class Client // ensure that it won't happen until CLIENT_DID_LOGOFF was dispatched _runQueue.postRunnable(new Runnable() { public void run () { + // tell the object manager that we're no longer connected to the server + if (_omgr instanceof ClientDObjectMgr) { + ((ClientDObjectMgr)_omgr).cleanup(); + } + // clear out our references _comm = null; _omgr = null; diff --git a/src/java/com/threerings/presents/client/ClientDObjectMgr.java b/src/java/com/threerings/presents/client/ClientDObjectMgr.java index 1fe6f61ac..4e334ebe1 100644 --- a/src/java/com/threerings/presents/client/ClientDObjectMgr.java +++ b/src/java/com/threerings/presents/client/ClientDObjectMgr.java @@ -185,6 +185,20 @@ public class ClientDObjectMgr } } + /** + * Called when the client is cleaned up due to having disconnected from the server. + */ + public void cleanup () + { + // tell any pending object subscribers that they're not getting their bits + for (PendingRequest req : _penders.values()) { + for (Subscriber sub : req.targets) { + sub.requestFailed(req.oid, new ObjectAccessException("Client connection closed")); + } + } + _penders.clear(); + } + protected void queueAction ( int oid, Subscriber target, boolean subscribe) {