if not statusCode: statusCode = msn.STATUS_ONLINE
if not personal: personal = ""
if self.notificationClient:
- changeCount = [0] # Hack
+ changeCount = [0] # Hack for Python's limited scope :(
def cb(ignored=None):
changeCount[0] += 1
if changeCount[0] == 3:
self.ourStatusChanged(statusCode, screenName, personal)
+ def errcb(ignored=None):
+ pass # FIXME, should we do something here?
LogEvent(INFO, self.ident)
- self.notificationClient.changeStatus(statusCode.encode("utf-8")).addCallback(cb)
- self.notificationClient.changeScreenName(screenName.encode("utf-8")).addCallback(cb)
- self.notificationClient.changePersonalMessage(personal.encode("utf-8")).addCallback(cb)
+ self.notificationClient.changeStatus(statusCode.encode("utf-8")).addCallbacks(cb, errcb)
+ self.notificationClient.changeScreenName(screenName.encode("utf-8")).addCallbacks(cb, errcb)
+ self.notificationClient.changePersonalMessage(personal.encode("utf-8")).addCallbacks(cb, errcb)
# Remember the saved status
self.savedEvents.statusCode = statusCode
self.savedEvents.screenName = screenName
for c in self.connectors:
c.disconnect()
if self.notificationFactory:
+ self.notificationFactory.stopTrying()
self.notificationFactory.msncon = None
self.connectors = []
for sbs in self.switchboardSessions.values():
self.connectionLost = self.doDisconnect
def connectionLost(self, reason):
- if not self.ready: return
+ if not self.factory.msncon:
+ # If MSNConnection.logOut is called before _notificationClientReady
+ return
+
def wait():
LogEvent(INFO, self.factory.msncon.ident)
msn.NotificationClient.connectionLost(self, reason)
- if self.factory.maxRetries >= self.factory.retries:
+ if self.factory.maxRetries > self.factory.retries:
+ self.factory.stopTrying()
self.factory.msncon.connectionLost(reason)
# Make sure this event is handled after any others
reactor.callLater(0, wait)
sb = self.factory.msncon.switchboardSessions.get(userHandle)
if sb and sb.transport:
sb.transport.loseConnection()
- else:
- sb = OneSwitchboardSession(self.factory.msncon, userHandle)
- self.factory.msncon.switchboardSessions[userHandle] = sb
+ sb = OneSwitchboardSession(self.factory.msncon, userHandle)
+ self.factory.msncon.switchboardSessions[userHandle] = sb
sb.connectReply(host, port, key, sessionID)
def multipleLogin(self):
d = msn.SwitchboardClient.sendMessage(self, message)
if not noerror:
- d.addCallback(failedMessage)
+ d.addCallbacks(failedMessage, failedMessage)
else:
chunks = int(math.ceil(len(text) / float(MSNConnection.MAXMESSAGESIZE)))
for message, noerror in self.messageBuffer:
if not noerror:
self.failedMessage(message)
+ self.messageBuffer = []
SwitchboardSessionBase.connectionLost(self, reason)
def _ready(self):