Помогите мне понять эту трассировку из примера MSN twisted.words
Я запускаю пример протокола Twisted.words MSN из витой документации, расположенной здесь: http://twistedmatrix.com/projects/words/documentation/examples/msn_example.py
Я знаю, что есть еще один вопрос об этом образце.py на stackru, но это совершенно другая проблема. Когда я запускаю пример, он ведет себя как ожидалось. Заходит в учетную запись и отображает информацию о пользователях в списке контактов, но после этого выдает эту трассировку.
> Traceback (most recent call last):
> File
> "c:\python26\lib\site-packages\twisted\python\log.py",
> line 84, in callWithLogger
> return callWithContext({"system": lp}, func, *args, **kw) File
> "c:\python26\lib\site-packages\twisted\python\log.py",
> line 69, in callWithContext
> return context.call({ILogContext: newCtx}, func, *args, **kw) File
> "c:\python26\lib\site-packages\twisted\python\context.py",
> line 59, in callWithContext
> return self.currentContext().callWithContext(ctx,
> func, *args, **kw) File
> "c:\python26\lib\site-packages\twisted\python\context.py",
> line 37, in callWithContext
> return func(*args,**kw)
> --- <exception caught here> --- File "c:\python26\lib\site-packages\twisted\internet\selectreactor.py",
> line 146, in _doReadOrWrite
> why = getattr(selectable, method)() File
> "c:\python26\lib\site-packages\twisted\internet\tcp.py",
> line 463, in doRead
> return self.protocol.dataReceived(data)
> File
> "c:\python26\lib\site-packages\twisted\protocols\basic.py", line 239, indataReceived
> return self.rawDataReceived(data) File
> "c:\python26\lib\site-packages\twisted\words\protocols\msn.py",
> line 676 in rawDataReceived
> self.gotMessage(m) File "c:\python26\lib\site-packages\twisted\words\protocols\msn.py",
> line 699, in gotMessage
> raise NotImplementedError exceptions.NotImplementedError:
Может ли кто-нибудь помочь мне понять, что это значит?
2 ответа
Похоже, это изменение в том, как работает сервер MSN, хотя на самом деле это не считается изменением протокола. Происходит то, что сервер MSN отправляет сообщение клиенту сразу после подключения клиента, а пример Twisted words не ожидает этого.
Предполагая, что вы запускаете msn_example.py с http://twistedmatrix.com/projects/words/documentation/examples/, вы можете заставить пример работать и посмотреть, что происходит, добавив следующий код в пример (сразу после окончания функции listSynchronized):
def gotMessage(self, message):
print message.headers
print message.getMessage()
После внесения изменений, если вы запустите пример, вы должны увидеть следующее:
...
2009-08-25 00:03:23-0700 [Notification,client] {'Content-Type': 'text/x-msmsgsinitialemailnotification; charset=UTF-8', 'MIME-Version': '1.0'}
2009-08-25 00:03:23-0700 [Notification,client] Inbox-Unread: 1
2009-08-25 00:03:23-0700 [Notification,client] Folders-Unread: 0
2009-08-25 00:03:23-0700 [Notification,client] Inbox-URL: /cgi-bin/HoTMaiL
2009-08-25 00:03:23-0700 [Notification,client] Folders-URL: /cgi-bin/folders
2009-08-25 00:03:23-0700 [Notification,client] Post-URL: http://www.hotmail.com
2009-08-25 00:03:23-0700 [Notification,client]
Мы видим, что сервер отправляет клиенту сообщение, в котором указывается количество непрочитанных сообщений электронной почты для этой учетной записи.
Надеюсь, это поможет!
Метод gotMessage утверждает, что не реализован. Скорее всего, это означает, что вы подклассировали класс, которому необходимо переопределить gotMessage в подклассе, но вы не сделали переопределение.