Android基於XMPP Smack openfire 開發的聊天室(三) 【新舊記錄、踢人】

來源:互聯網
上載者:User

1,聊天室新舊訊息的記錄,先看看一段伺服器返回的XML吧

<message    from='darkcave@chat.shakespeare.lit/firstwitch'    to='hecate@shakespeare.lit/broom'    type='groupchat'>  <body>Thrice the brinded cat hath mew'd.</body>  <delay xmlns='urn:xmpp:delay'     from='crone1@shakespeare.lit/desktop'     stamp='2002-10-13T23:58:37Z'/></message> <message    from='darkcave@chat.shakespeare.lit/secondwitch'    to='hecate@shakespeare.lit/broom'    type='groupchat'>  <body>Thrice and once the hedge-pig whined.</body>  <delay xmlns='urn:xmpp:delay'     from='wiccarocks@shakespeare.lit/laptop'     stamp='2002-10-13T23:58:43Z'/></message> <message    from='darkcave@chat.shakespeare.lit/thirdwitch'    to='hecate@shakespeare.lit/broom'    type='groupchat'>  <body>Harpier cries 'Tis time, 'tis time.</body>  <delay xmlns='urn:xmpp:delay'     from='hag66@shakespeare.lit/pda'     stamp='2002-10-13T23:58:49Z'/></message>

上邊這段是一個聊天室返回的XML資料,是曆史訊息。就在這裡要告訴大家的是,如果是新訊息的話就沒有<delay>節點。所以我們以這個為根據來判斷。下邊貼些My Code,因為伺服器被我們給改了,所以返回的有些出入。但八九不離十。原理一樣。

DelayInformation inf = (DelayInformation) message.getExtension("x", "jabber:x:delay");System.out.println("判斷訊息");if (inf == null && count >= 1) {System.out.println("新訊息來了");isHistory = true;} else {System.out.println("這是舊的訊息");}

 

這段代碼寫哪裡呢,就是寫在訊息的監聽裡頭

/** * PacketListener 通過一個規定的過濾器提供一個機制來監聽資料包 *  * @author liaonaibo *  */class ChatPacketListener implements PacketListener 

 

重寫它的方法

@Overridepublic void processPacket(Packet packet)

 

好了,下邊講踢人吧

2,踢人:

        踢人很簡單,只要你是房主,或管理員什麼的,主持人也行。這些高許可權的才能有踢人的許可權。

// 踢人try {String nickName = affiliates.get(id);//得到的暱稱包含的房間名和服務名的一段很長資料。好像是吧。哈哈,忘記了。所以截取吧muc.kickParticipant(nickName.substring(nickName.indexOf("]") + 1), "看你不爽就 踢了你");android.os.Message msg = new android.os.Message();msg.what = MEMBER;handler.sendMessage(msg);Toast.makeText(this, "哈哈,踹了你", Toast.LENGTH_LONG).show();} catch (XMPPException e) {e.printStackTrace();Toast.makeText(this, "你沒有權利踢人", Toast.LENGTH_LONG).show();}

有的哥們會疑惑,說如果根據暱稱來踢人,那會不會把重名的人都一起踢了。這個問題我也想過,這個也是測試的一個弊端。但是如果通過spark來看,即便你用同樣的名字加入了房間,要麼會報錯,要麼就是系統自動在你的名字後邊加個2,呵呵,夠2吧。如果有人堅持要用自己的暱稱,這個可以的,具體怎麼樣做,下次再闡述。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.