openfire的MUC改造类似QQ永久群(二)

73 篇文章 0 订阅

openfire的MUC改造类似QQ永久群(二)

在前面一篇博客中写到(见点击查看),怎么把openfire的MUC通过插件的形势转为可持久化的类似QQ群一样的功能。 但是很多人没看懂,今天再写一篇,并赋予源码,希望能解开你们的迷惑。本文基于问答形势

1.如何实现把成员持久化 
   答:其实代码中实现持久化的代码就如下几行代码,这几行代码是模拟管理后台加入成员到MUC群

 
MUCRoom mucroom =XMPPServer.getInstance().getMultiUserChatManager().getMultiUserChatService(roomJID).getChatRoom(roomJID.getNode());
IQ iq = new IQ(IQ.Type.set); 
Element frag = iq.setChildElement("query", "http://jabber.org/protocol/muc#member");
Element item = frag.addElement("item");
item.addAttribute("affiliation", "member");
item.addAttribute("jid", mjid);
item.addAttribute("nick",nickname);
mucroom.getIQAdminHandler().handleIQ(iq, mucroom.getRole());

2.我写了一个MUCEventListener的监听实现为什么调试没有进入?
   答:光写了监听实现是不够的,必须在Plugin主类里面的方法initializePlugin里面添加如下一行代码 MUCEventDispatcher.addListener(xxxx); ,这里的xxxx你可以是new 一个MUCEventListener实现或者 this(前提条件是你的plugin主类也实现了MUCEventListener)。 
3.为什么注释里面有句如果muc房间里面一个用户都还不存在?
   答:如果房间一个成员都还没有,那么这个时候是不是房间正在创建中呢?创建人默认不是成员,而是会自动 把创建人的信息放入到表ofmucaffiliation里面。 
4.为什么不能通过协议的形式把昵称插入数据库,而是自己写了一个updateNick方法?
   答:这个我也试过多次,后面跟源码进入,发现就是你设置了昵称也不能插入数据库里面,因为在插件的时候就没用到这个昵称。 
5.成员数据持久化客户端还需要做什么?
   答:加入这个插件后,客户端不需要做任何改动和添加代码 
6.如果想成员登录后自动获取加入过的群列表怎么做?
   答:写一个SessionEventListener的实现,然后监听用户登录后查询用户的群列表再自定义组装一个IQ或者Message返回客户端,客户端解析获取;如果想客户端主动来获取, 那么可以自定义一个IQhander来实现然后客户端发起IQ服务端响应;如果希望更加简单一点的实现,当然可以在插件里面提供对外的servlet访问接口,通过调用url的形势返回数据,几种方式任意选择。 
7.为什么我登录了账号,在线了但是群里面看不见我?
   答:请明白MUC本来是会议室的意思,也就说(你到公司了,但是你不进入会议室,会议室的人认为你来了吗?)所以你登录后必须join后,其他成员才可以在在线人员里面看见你。

暂时就写这些问题了啊,下面请自行下载源码和编译后的插件包:
http://pan.baidu.com/s/1o6JqTg2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值