国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Smack Message擴(kuò)展,添加自定義元素(標(biāo)簽)經(jīng)驗(yàn)分享

2019-11-15 00:09:08
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
Smack Message擴(kuò)展,添加自定義元素(標(biāo)簽)經(jīng)驗(yàn)分享

Smack框架對(duì)XMPP協(xié)議進(jìn)行了封裝,從而方便與Openfire即時(shí)通信服務(wù)器做交互。說(shuō)白了,Smack框架可以通過(guò)對(duì)象構(gòu)造符合XMPP協(xié)議的xml字符串,避免手動(dòng)拼接字符串。

XMPP協(xié)議基本XML結(jié)構(gòu)如下:

1 <message2     from='發(fā)送方j(luò)id'3     to='接收方j(luò)id'4     type='消息類型(普通消息/群聊)'>5   <body>消息內(nèi)容</body>6 </message>

大多數(shù)情況下,這么簡(jiǎn)單的結(jié)構(gòu)是滿足不了需求的,我們可能會(huì)嘗試向message元素下增加子元素,用來(lái)描述更多信息。

比如,除了發(fā)送方的jid,我們想直接帶上發(fā)送方的昵稱和頭像URL,這樣可以避免反復(fù)從數(shù)據(jù)庫(kù)中查詢這些基本信息。但這個(gè)看似簡(jiǎn)單的過(guò)程,在Smack中實(shí)現(xiàn)的卻相當(dāng)隱晦,接下來(lái)直接通過(guò)代碼說(shuō)明。

發(fā)送消息基本流程

 1 //build chat 2 Chat chat = chatManager.createChat("對(duì)方j(luò)id"); 3  4 //build extension 5 UserInfo4XMPP userInfo4XMPP = new UserInfo4XMPP(); 6 userInfo4XMPP.setNameText("菜鳥"); 7 userInfo4XMPP.setUrlText("http://www.liaoku.org/"); 8  9 //build message10 Message message = new Message();11 message.setBody("hello 你好");  //消息內(nèi)容12 message.addExtension(userInfo4XMPP);  //添加擴(kuò)展內(nèi)容13 14 //send15 chat.sendMessage(message);

UserInfo4XMPP 定義

 1 import org.jivesoftware.smack.packet.ExtensionElement; 2  3 /** 4  * 為Message擴(kuò)展用戶信息 5  * @author 楊元(轉(zhuǎn)載不注明出處可恥,原文請(qǐng)搜索[楊元博客]) 6  * @version 創(chuàng)建時(shí)間:2015年5月11日 下午4:55:38 7  */ 8 public class UserInfo4XMPP implements ExtensionElement{ 9     10     //用戶信息元素名稱11     PRivate String elementName = "userinfo";12     //用戶昵稱元素名稱13     private String nameElement = "name";14     //用戶頭像地址元素名稱15     private String urlElement = "url";16     //用戶昵稱元素文本(對(duì)外開放)17     private String nameText = "";18     //用戶頭像地址元素文本(對(duì)外開放)19     private String urlText = "";20     21     @Override22     public String getElementName() {23         return elementName;24     }25     26     /**27      * 返回?cái)U(kuò)展的xml字符串28      * 此字符串作為message元素的子元素29      */30     @Override31     public CharSequence toXML() {32         StringBuilder sb = new StringBuilder();33         34         sb.append("<");35         sb.append(elementName);36         sb.append(">");37         38             sb.append("<");39             sb.append(nameElement);40             sb.append(">");41             sb.append(nameText);42             sb.append("</");43             sb.append(nameElement);44             sb.append(">");45             46             sb.append("<");47             sb.append(urlElement);48             sb.append(">");49             sb.append(urlText);50             sb.append("</");51             sb.append(urlElement);52             sb.append(">");53         54         sb.append("</");55         sb.append(elementName);56         sb.append(">");57         58         return sb.toString();59     }60 61     /**62      * 可忽略63      */64     @Override65     public String getNamespace() {66         return "";67     }68     69     public String getNameText() {70         return nameText;71     }72 73     public void setNameText(String nameText) {74         this.nameText = nameText;75     }76 77     public String getUrlText() {78         return urlText;79     }80 81     public void setUrlText(String urlText) {82         this.urlText = urlText;83     }84 }

簡(jiǎn)單說(shuō)明下,關(guān)鍵是實(shí)現(xiàn)ExtensionElement接口,然后實(shí)現(xiàn)自己的toXML方法,將要擴(kuò)展的XML字符串返回即可,此字符串將作為message元素的子元素。

生成的message xml 結(jié)構(gòu)

1 <message id='76Ws9-11'>2     <body>hello 你好</body>3     <userinfo>4         <name>菜鳥</name>5         <url>http://www.liaoku.org/</url>6     </userinfo>7 </message>

基本流程就是這樣了,希望對(duì)讀者有所幫助。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 尼勒克县| 宝鸡市| 梅州市| 泗洪县| 依安县| 金华市| 潼关县| 包头市| 汶川县| 琼海市| 池州市| 盐亭县| 临安市| 界首市| 麻栗坡县| 海宁市| 江西省| 新建县| 拜泉县| 乐安县| 历史| 即墨市| 石阡县| 军事| 新营市| 吉首市| 琼结县| 卢氏县| 通渭县| 临朐县| 蒙阴县| 盐源县| 苏尼特左旗| 咸宁市| 景宁| 武邑县| 虞城县| 易门县| 丹巴县| 兰州市| 措美县|