日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

改造MUC实现Openfire群

發(fā)布時(shí)間:2023/12/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 改造MUC实现Openfire群 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我的Openfire群實(shí)現(xiàn)思路:

1、群和群成員,要保存到表中。

2、拉取群列表和群成員列表,均從DB中查詢(xún)返回。

3、拋棄老外的“進(jìn)房間,要發(fā)Presence?”。只要此人一上線(xiàn),就模似一個(gè)Presence進(jìn)行joinRoom,進(jìn)入他的各群房間。

???? 多了解LocalMUCRoom 類(lèi)中:public LocalMUCRole joinRoom(String nickname, String password, HistoryRequest historyRequest,?LocalMUCUser user, Presence presence)

??? 我的模似代碼如下:

View Code ?1?/**
?2??????*?模似用戶(hù)進(jìn)群(含呢稱(chēng)、含Precense、初始化角色LocalMUCRole)
?3??????*?@param?roomId
?4??????*?@param?packet
?5??????*?@return
?6??????*/
?7?????public?MUCRole?getRolesByRoomId(long?roomId,?Packet?packet)
?8?????{
?9?????????MUCRole?role?=?null;
10?????????try?{
11?????????????//?Get?or?create?the?room??獲取該群
12?????????????MUCRoom?room?=?server.getChatRoom(roomId,?packet.getFrom());
13?????????????
14?????????????//從數(shù)據(jù)庫(kù)中查詢(xún)他的姓名作為昵稱(chēng)(得自己實(shí)現(xiàn))
15?????????????String?nickname?=?new?MUCRoomServiceDao().getUserNickname(packet.getFrom().getNode());
16?????????????if(nickname?==?null)
17?????????????{
18?????????????????if(packet.getFrom().getResource()?!=?null)
19?????????????????{
20?????????????????????nickname?=?packet.getFrom().getResource();
21?????????????????}
22?????????????????else?
23?????????????????{
24?????????????????????nickname?=?packet.getFrom().getNode();
25?????????????????}
26?????????????}
27?????????????
28?????????????HistoryRequest?historyRequest?=?null;
29?????????????String?password?=?null;
30?????????????
31?????????????//構(gòu)建成員進(jìn)入群的Presence
32?????????????Presence?presence?=?new?Presence();
33?????????????presence.setTo(room.getJID().toBareJID()?+?"/"?+?nickname);????
34?????????????presence.setFrom(packet.getFrom());
35?????????????PacketExtension?extension?=?new?PacketExtension("x",?http://jabber.org/protocol/muc);
36?????????????presence.addExtension(extension);
37?????????????
38?????????????//?The?user?joins?the?room?用戶(hù)進(jìn)入群
39?????????????role?=?room.joinRoom(nickname,
40?????????????????????password,
41?????????????????????historyRequest,
42?????????????????????this,
43?????????????????????presence);
44?????????????
45?????????????//?If?the?client?that?created?the?room?is?non-MUC?compliant?then
46?????????????//?unlock?the?room?thus?creating?an?"instant"?room
47?????????????//if?(mucInfo?==?null?&&?room.isLocked()?&&?!room.isManuallyLocked())?{
48?????????????if?(room.isLocked()?&&?!room.isManuallyLocked())?{
49?????????????????room.unlock(role);
50?????????????????//server.chatRoomAdded((LocalMUCRoom)room);
51?????????????}
52?????????????
53?????????????addRole(roomId,?(LocalMUCRole)role);//添加“用戶(hù)在某個(gè)群中的角色”
54?????????????
55?????????}
56?????????catch?(UnauthorizedException?e)?{
57?????????????sendErrorPacket(packet,?PacketError.Condition.not_authorized);
58?????????}
59?????????catch?(ServiceUnavailableException?e)?{
60?????????????sendErrorPacket(packet,?PacketError.Condition.service_unavailable);
61?????????}
62?????????catch?(UserAlreadyExistsException?e)?{
63?????????????sendErrorPacket(packet,?PacketError.Condition.conflict);
64?????????}
65?????????catch?(RoomLockedException?e)?{
66?????????????sendErrorPacket(packet,?PacketError.Condition.recipient_unavailable);
67?????????}
68?????????catch?(ForbiddenException?e)?{
69?????????????sendErrorPacket(packet,?PacketError.Condition.forbidden);
70?????????}
71?????????catch?(RegistrationRequiredException?e)?{
72?????????????sendErrorPacket(packet,?PacketError.Condition.registration_required);
73?????????}
74?????????catch?(ConflictException?e)?{
75?????????????sendErrorPacket(packet,?PacketError.Condition.conflict);
76?????????}
77?????????catch?(NotAcceptableException?e)?{
78?????????????sendErrorPacket(packet,?PacketError.Condition.not_acceptable);
79?????????}
80?????????catch?(NotAllowedException?e)?{
81?????????????sendErrorPacket(packet,?PacketError.Condition.not_allowed);
82?????????}????????
83?????????return?role;
84?????}

?4、拋棄老外的“以昵稱(chēng)為Key 緩存群成員”。改為以帳號(hào)為Key。

???? 多了解 LocalMUCRoom 類(lèi)中:private Map<String,MUCRole> occupants = new ConcurrentHashMap<String, MUCRole>();

???? 在joinRoom辦法中:????

View Code 1?//以JID作為緩存的key
2?????????JID?userJid?=?user.getAddress();
3?????????if?(userJid?!=?null)?{
4?????????????occupants.put(userJid.toBareJID(),?joinRole);
5?????????}

?5、詳細(xì)了解 LocalMUCRoom、LocalMUCUser、LocalMUCRole這三個(gè)類(lèi),各類(lèi)中的數(shù)據(jù)成員、方法。?

?

轉(zhuǎn)載于:https://www.cnblogs.com/huazai8204/archive/2011/12/31/2309022.html

總結(jié)

以上是生活随笔為你收集整理的改造MUC实现Openfire群的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。