]> code.delx.au - pymsnt/blobdiff - src/tlib/msn/msnw.py
Handle disconnects better.
[pymsnt] / src / tlib / msn / msnw.py
index 46d8018d3c059e5eb4a2f37a04f5df12554ae931..87ed0442623ce420d1881590cf7059ed98383447 100644 (file)
@@ -231,10 +231,11 @@ class MSNConnection:
                        self.notificationClient.logOut()
                for c in self.connectors:
                        c.disconnect()
+               self.connectors = []
                if self.notificationFactory:
                        self.notificationFactory.stopTrying()
                        self.notificationFactory.msncon = None
-               self.connectors = []
+                       self.notificationFactory = None
                for sbs in self.switchboardSessions.values():
                        if hasattr(sbs, "transport") and sbs.transport:
                                sbs.transport.loseConnection()
@@ -388,7 +389,7 @@ class NotificationClient(msn.NotificationClient):
                # are now redundant
                self.loginFailure = self.doDisconnect
                self.loggedIn = self.doDisconnect
-               self.connectionLost = self.doDisconnect
+               self.connectionLost = lambda reason: msn.NotificationClient.connectionLost(self, reason)
        
        def connectionLost(self, reason):
                if not self.factory.msncon:
@@ -690,12 +691,12 @@ class OneSwitchboardSession(SwitchboardSessionBase):
                LogEvent(INFO, self.ident)
                if not self.reply:
                        def failCB(arg=None):
+                               self.timeout = None
+                               self.transport.loseConnection()
                                if not (self.msncon and self.msncon.switchboardSessions.has_key(self.remoteUser)):
                                        return
                                LogEvent(INFO, self.ident, "User has not joined after 30 seconds.")
                                del self.msncon.switchboardSessions[self.remoteUser]
-                               self.timeout = None
-                               self.transport.loseConnection()
                        d = self.inviteUser(self.remoteUser)
                        d.addErrback(failCB)
                        self.timeout = reactor.callLater(30.0, failCB)