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的即時通訊Android筆記
- 基於XMPP協議開發Android即時通訊軟體協議Android
- iOS實現XMPP通訊(一)搭建OpenfireiOS
- C#連線基於Java開發IM——OpenfireC#Java
- 基於 golang + vue + websocket 開發的聊天室GolangVueWeb
- 聊天室應用開發實踐(二):實現基於 Web 的聊天室Web
- Android 多渠道打包開發記錄Android
- Smack 開發總結(一)管理連線Mac
- 基於netty的聊天室Netty
- 基於golang的聊天室Golang
- android 基於dex的外掛化開發Android
- Android開發筆記[10]-關於頁Android筆記
- 記一次基於雲服務開發文件線上編輯系統的開發記錄,支援版本記錄、可增加批註。
- 記錄一次基於vue、typescript、pwa的專案由開發到部署VueTypeScript
- 基於webapi的websocket聊天室(四)WebAPI
- 基於 MVP 的 Android 元件化開發框架實踐MVPAndroid元件化框架
- 新舊年交替的“投基”策略
- Android Q 新特性及變更記錄Android
- 探索基於WebRTC的有感錄屏技術開發流程Web
- 基於Linphone開發Android音視訊通話Android
- 開發記錄
- 新資料湖產品MinIO基於NVMe基準測試打破記錄
- 基於webapi的websocket聊天室(番外二)WebAPI
- 基於webapi的websocket聊天室(番外一)WebAPI
- C++ 實現基於TCP的聊天室C++TCP
- Android開發隨記Android
- Android開發筆記Android筆記
- Android BLE 藍芽開發——掃碼槍基於BLESSEDAndroid藍芽
- 基於Android5.0的Camera Framework原始碼分析 (三)AndroidFramework原始碼
- Android 基於ffmpeg開發簡易播放器 - 基礎知識Android播放器
- Android 基於ffmpeg開發簡易播放器 – 基礎知識Android播放器
- 基於元件化開發,一個簡單的Android專案框架元件化Android框架
- 新的開始--記錄讓生活更美好
- android開發者資源下載地址記錄(轉+補充)Android
- 基於 flask 結合 Redis 的簡單聊天室FlaskRedis
- 基於 Github API 的圖床 Chrome 外掛開發全紀錄GithubAPI圖床Chrome
- Android 開發知識集合目錄Android
- 開發筆記--基於thinkphp3.2.3開發的個人技術部落格筆記PHP
- 基於 Hyperf 開發的商城