openfire web client 開發系列(4) -- Strophe Builder

openfire web client 開發系列(4) -- Strophe Builder

如何建立XMPP stanza是撰寫XMPP程式的最重要部分,舉凡連通、查詢、好友等,都是複雜的XMPP stanza通訊組合排列建立起來的。

建構XMPP stanza,由Strophe.Builder這個物件負責。一個builder由元素名稱及一組屬性的設定構成。

 

例如:

var pres1 = new Strophe.Builder(“presence”, {to: “of3”});

 

 

因為開發過程,建立XMPP stanza的寫法會常常用到,而且可能會寫很長,因此針對撰寫的方法,提供了縮寫的代詞。

四大天王:

$builder : Create a Strophe.Builder.

$pres :Create a Strophe.Builder with a <presence/> element as the root.

$msg :Create a Strophe.Builder with a <message/> element as the root.

$iq :Create a Strophe.Builder with an <iq/> element as the root.

 

範例1:

$pres().c('show').t("away").up().c('status').t("reading")

製造出XMPP stanza

<presence xmlns='jabber:client'><show>away</show><status>reading</status></presence>

 

範例2:

$iq({type: "get", id: "version1", to: "jabber.org"}).c("query", {xmlns: "jabber:iq:version"})

製造出XMPP stanza

<iq type='get' id='version1' to='jabber.org' xmlns='jabber:client'><query xmlns='jabber:iq:version'/></iq>

 

範例3:

$msg({to: 't004@of3', type: 'chat'}).c('body').t('吃飽沒?')

製造出XMPP stanza

<message to='t004@of3' type='chat' xmlns='jabber:client'><body>吃飽沒?</body></message>

 

範例4:

$build("message",{to:"t004@of3",type:"chat"}).c("body").t("hello")

製造出XMPP stanza

<message to='t004@of3' type='chat' xmlns='jabber:client'><body>hello</body></message>

 

如果是使用$build來製造,就必須指定誰來當root element,如果是直接使用$pres,root element就是<presence>,其餘類推。

 

在上上篇系列(2)中,我們實作了一個簡單的web版主控台,這時便可以派上用場,上面的範例文字,都可以輸入在最上面的input文字區塊內,按下送出後,順便可觀察往返XML內容。

image

 

如果你有其他機台,不妨安裝支援XMPP協定的Client端軟體,如Pidgin、Adium之類,可互相傳訊息,進一步了解XMPP stanza的意義。

image

 

image

 

四大天王底下還有一些可串接的方法

1. c():在XMPP stanza內增加子元素。

2. cnode():功能同c(),大部分情況不使用這個。

3. t():不影響元素結構,純加文字。

4. up():

直接看例子比較快,文字敘述難解。

沒有用up()的範例

$build(“root”).c(“child1”).c(“child2”) ⇒ <root><child1><child2/></child1></root>

有使用up()的範例

$build(“root”).c(“child1”).up().c(“child2”) ⇒ <root><child2/><child1/></root>