2010-02-15 61 views
3

我有一個MyJabber類,它初始化一個基本的jabber帳戶,它將傳入的消息打印到標準輸出+將它們放入隊列中。如何以正確的方式初始化加捻反應器?

客戶端添加到反應器中的代碼是這樣的:

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) 

回答

4

這似乎並沒有真正成爲一個問題,關於如何「初始化扭曲反應堆」。相反,它似乎更多地是關於如何使用Twisted Words的XMPP支持來發送和響應XMPP消息。

你可以找到幾個例子,它這樣做在扭曲字的例子目錄:

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

嘗試xmpp_client.pyjabber_client.py

+0

注方: 如果我改變類的定義,我用的是代碼爲單一的應用程序,它工作正常。反應堆代碼沒有問題。 由於我是不可靠的,反應器組件也可以在類定義之外激活,因爲它是所有協議共享的組件。但它掛起。 所以問題的關鍵是與反應堆有關:) xmpp代碼工作正常:) – giskard

+1

「類定義之外」或「隱含的」「類定義」之間沒有本質區別。如果採用一種方法的代碼版本適用,而採用不同方法的版本則不適用,那麼在從一種方法轉換爲另一種方法時引入了一些錯誤。但是,通過閱讀您在此發佈的代碼,無法知道該發生什麼問題。 –

0

固定,有2個錯誤。

1)我不小心忘了一個JID是[email protected]/extra

2)忘了補充self.gotMessage/gotSomething

,我也做了addReactor返回工廠,在main( )寫道:

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