Как правильно запустить витой реактор? - PullRequest
3 голосов
/ 15 февраля 2010

У меня есть класс MyJabber, который запускает базовую учетную запись jabber, которая печатает входящие сообщения в stdout + помещают их в очередь.

Код, который добавляет клиента в реактор:

def addReactor(self):
    print 'inside  AddReactor'
    factory = client.basicClientFactory(self.jid, self.option['jabber']['password'])
    print "factory initialized"
    factory.addBootstrap(xmlstream.STREAM_AUTHD_EVENT, self.authd)
    print 'factory bootsraped'
    reactor.connectTCP(self.option['jabber']['server'], 5222, factory)

это называется так:

jabber = MyJabber(options, to_irc)
jabber.addReactor()
reactor.run()

Когда я запускаю приложение, я вижу «печать» addReactor, но после этого больше ничего. через tcpdump я вижу, что что-то пытается подключиться к jabber.org, но ничего не связано с authd def:

def authd(self, xmlstream):
    global thexmlstream
    thexmlstream = xmlstream
    # need to send presence so clients know we're
    # actually online.
    print 'Initializing...'
    presence = domish.Element(('jabber:client', 'presence'))
    presence.addElement('status').addContent('Online')

    xmlstream.send(presence)
    # add a callback for the messages
    print 'Add gotMessaged callback'
    xmlstream.addObserver('/message', gotMessage)
    print 'Add * callback'
    xmlstream.addObserver('/*', gotSomething)

Ответы [ 2 ]

4 голосов
/ 15 февраля 2010

Похоже, на самом деле это не вопрос о том, как «инициировать витой реактор». Скорее, это больше о том, как использовать поддержку XMPP Twisted Words для отправки и ответа на сообщения XMPP.

Вы можете найти пару примеров, которые делают это в каталоге примеров Twisted Words:

http://twistedmatrix.com/documents/current/words/examples/

Попробуйте xmpp_client.py и jabber_client.py.

0 голосов
/ 16 февраля 2010

Исправлено, было 2 ошибки.

1) Я случайно забыл, что JID это name@domain.tld/extra

2) Забыл добавить self. к gotMessage/gotSomething

Я также заставил addReactor вернуть фабрику и в main () написал:

jabber = MyJabber(options, to_irc)
factory = jabber.addReactor()
reactor.connectTCP(options['jabber']['server'], 5222, factory)
reactor.run()
...