2012-06-26 33 views
0

我的工作創造了XMPP客戶端測試和我有必要與沿途不同的自定義節上班工作。我有兩個問題,我想知道你們是否可以幫助我:Sleekxmpp:與一個以上的客戶節

  1. 正如我所提到的,我將使用幾個名字相同但命名空間不同的節。另外這個詩節可以是兩個級別以上的,這裏有一個例子:

STANZA 1

<iq type='result' to= 'chat.com' id='id1'> 
     <aa xmlns='http://mysite.com/profile' > 
      <name>My name as included in sent mails<name> 
      <lang>en</lang> 
      <mail>My mail as included in sent mails</mail> 
      <fbuserid>46736473231<fbuserid> 
      <fbaccesstoken>AAAAA84257YTRRIXTEQITXXTCMTVBTTBXU<fbaccesstoken> 
      <photo_url>http://pic.facebook.com/photo.jpg</photo_url> 
     </aa> 
</iq> 

我創建的自定義節如下:

name = 'aa' 
namespace = 'http://mysite.com/profile' 
plugin_attrib = 'aa' 
interfaces = set(('name', 'lang', 'mail', 'fbuserid', 'fbaccesstoken', 'photo_url')) 
sub_interfaces = interfaces 

STANZA 2

<iq type='set' to= '[email protected]' id='id1'> 
<aa xmlns='http://mysite.com/muc#share'> 
    <item name='Falda tubo' thumbnail='http://webpage.info/falda_tn.jpg' id='itemid1' action='add' url='http://webpage.info/falda.html’> 
     <metadata path=' ' /> 
    </item> 
</aa> 
</iq> 

問題1:如何創建兩個以上的升節evels?

  1. 正如你所看到的,我節的名稱相同,但改變了命名空間,這是給我一些麻煩,因爲我已經創建的方法如的get_ *和set_ *處理信息,但正在執行它如:

    register_stanza_plugin(Iq, stanza_profile) 
    register_stanza_plugin(Iq, stanza_rooms) 
    
    def start(self, event): 
        self.send_presence() 
        self.get_parameters() 
        self.set_parameters() 
    

這兩個註冊節,但只有在最後一個執行動作(stanza_rooms)

問題2:如何分別處理?

使用python。任何幫助感謝!

最好的問候,

回答

0

你對具有相同名稱的多個節的問題,它是plugin_attrib值是非常重要的,因爲這是將你的兩個節之間的區別。現在看起來你已經使用'aa'這兩個節的plugin_attrib這導致了衝突,最後註冊的節勝。

通常,我們在這些情況下使用部分名稱空間。例如,迪斯科有兩個query元素,命名空間爲http://jabber.org/protocol/disco#infohttp://jabber.org/protocol/disco#items。所以,這兩個節具有相同的name,不同namespace值,並有分別'disco_info''disco_items'plugin_attrib值。

看起來您可以使用名稱aa_profileaa_muc_share或類似名稱來解決問題。

對於你的其他問題,它看起來像你想要的是更多的節對象。一個提供外層容器節,另一個管理單個子項。您可以使用此工作:

class InnerStanza(ElementBase): 
    name = 'inner' 
    namespace = 'example' 
    plugin_attrib = 'inner' 
    plugin_multi_attrib = 'inner_items' 
    ... 

register_stanza_plugin(OuterStanza, InnerStanza, iterable=True) 

通過上述,您可以訪問outer['inner_items']得到匹配InnerStanza類(因爲plugin_multi_attrib值),內substanzas的列表。

- 蘭斯

+0

你好蘭斯, 首先,感謝你給的所有幫助。正如你所看到的,我已經加入了sleekxmpp會議室,但看起來我們處於不同的時區,所以很難溝通。通過您提供的幫助以及您和Nathanial創建的一些示例(https://github.com/fritzy/SleekXMPP/wiki/Stanza-Objects),我可以創建節,但我們的習慣節到時候會變得更加棘手,我不太明白。 – BarbSchael

+0

這是帖子的延續: 在這裏,我給你留下了我創建的一個自定義節,而且我不知道我是否做得對。這是我用你的幫助理解的。我提前道歉,如果它看起來一塌糊塗:https://friendpaste.com/3C3JbrHvNfHDdRUZ38aMZG 再次感謝。 – BarbSchael

+0

是的,我注意到時區差異是一個問題。我修改了您的示例,並對我更改的內容以及原因進行了修改:https://friendpaste.com/5OGWZfDN96mjkqrhzAOnLK簡而言之,主要問題僅僅是界面解析衝突以及節註冊調用的語法。 –