Android基於XMPP Smack openfire 開發的聊天室(三) 【新舊記錄、踢人】
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>節點。所以我們以這個為根據來判斷。下邊貼些我的程式碼,因為伺服器被我們給改了,所以返回的有些出入。但八九不離十。原理一樣。
- 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
- @Override
- public 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吧。如果有人堅持要用自己的暱稱,這個可以的,具體怎麼樣做,下次再闡述。
相關文章
- Android基於XMPP Smack openfire 開發的聊天室(二) 【聊天資訊、成員】AndroidMac
- Android基於XMPP Smack openfire 開發的聊天室(五) 【邀請、被邀請】AndroidMac
- Android基於XMPP Smack openfire 開發的聊天室(一)【會議服務、聊天室列表、加入】AndroidMac
- 基於xmpp openfire smack開發之openfire介紹和部署[1]Mac
- Android基於XMPP Smack openfire 開發的聊天室(四) 【建立房間、表單;報文】AndroidMac
- Android基於XMPP Smack openfire 開發的聊天室(七) 【成員狀態、自身狀態】AndroidMac
- 基於xmpp openfire smack開發之Android客戶端開發[3]MacAndroid客戶端
- Android基於XMPP Smack openfire 開發的聊天室(六) 【加入房間、許可權錯誤】AndroidMac
- 基於xmpp openfire smack開發之smack類庫介紹和使用[2]Mac
- 基於xmpp openfire smack開發之Android訊息推送技術原理分析和實踐[4]MacAndroid
- android基於openfire+smack開發之【架構瞭解】AndroidMac架構
- Android平臺下基於XMPP的IM研究(二 MultiUserChat 聊天室)Android
- Smack 4.1.0-beta1 釋出,XMPP 開發包Mac
- 基於XMPP協議(openfire伺服器)的訊息推送實現協議伺服器
- 基於Openfire Smack開發即時通訊應用、Spark安裝,註冊,登入,退出登入(二)MacSpark
- 基於XMPP協議開發Android即時通訊軟體協議Android
- smack和openfire通訊的簡單例子Mac單例
- Android學習筆記--基於XMPP的即時通訊Android筆記
- C#連線基於Java開發IM——OpenfireC#Java
- 【XMPP】Smack原始碼之初步認識Mac原始碼
- 基於 golang + vue + websocket 開發的聊天室GolangVueWeb
- 基於XMPP協議的Android即時通訊系協議Android
- Android平臺下基於XMPP的IM研究(一)Android
- 即時通訊軟體openfire+spark+smackSparkMac
- iOS實現XMPP通訊(一)搭建OpenfireiOS
- 基於XMPP的即時通訊系統的建立(一)— XMPP基礎概念
- 基於XMPP協議Android即時通訊開源應用協議Android
- 【XMPP】Smack原始碼之訊息接收與解析Mac原始碼
- 【XMPP】基於XMPP的即時通訊解決方案
- 聊天室應用開發實踐(二):實現基於 Web 的聊天室Web
- 基於XMPP的即時通訊系統的建立(二)— XMPP詳解
- 基於XMPP的即時通訊系統的建立(三)— 程式設計概覽程式設計
- 基於golang的聊天室Golang
- Apache MiNa + smack +openfilre 實現多人聊天室ApacheMac
- Android 多渠道打包開發記錄Android
- 基於XMPP實現android客戶端與伺服器的互動Android客戶端伺服器
- Android之基於XMPP協議即時通訊軟體(一)Android協議
- 記一次基於雲服務開發文件線上編輯系統的開發記錄,支援版本記錄、可增加批註。