根据openfire源码的提供,其中SubscriptionPlugin这个插件已经实现了自动添加了好友的功能,但好我项目的的要求还是有些不一样,我根据源码中的内容自己编写了一个插件,关键代码如下:
public static void acceptSubscription(Packet packet ,PresenceRouter router) throws PacketRejectedException { String serverName = XMPPServer.getInstance().getServerInfo().getXMPPDomain(); if (getSubscriptionLevel().equals(LOCAL)) { String toDomain = packet.getTo().getDomain(); String fromDomain = packet.getFrom().getDomain(); if (!toDomain.equals(serverName) || !fromDomain.equals(serverName)) { return; } } Presence presence = new Presence(); presence.setType(Presence.Type.subscribed); presence.setTo(packet.getTo()); presence.setFrom(packet.getFrom()); router.route(presence); String toUserName = packet.getTo().getNode(); try { // 获取昵称 String nickName = UserManager.getInstance().getUser(toUserName).getName(); if (nickName == null || nickName.trim().length() == 0){ nickName = packet.getFrom().getNode(); } // 添加一个分组为fans的名 List<String> groups = new ArrayList<String>(); groups.add("fans"); RosterItem item = new RosterItem(packet.getFrom(), RosterItem.SUB_BOTH, RosterItem.ASK_NONE, RosterItem.RECV_NONE, nickName, groups); RosterManager.getRosterItemProvider().createItem(toUserName, item); // 将状态设置为 “相互为好友” Iterator<RosterItem> rosterItemIterator= RosterManager.getRosterItemProvider().getItems(packet.getFrom().getNode()); if (rosterItemIterator != null){ while (rosterItemIterator.hasNext()) { RosterItem rosterItem = (RosterItem) rosterItemIterator.next(); if (toUserName.equals(rosterItem.getJid().getNode())){ rosterItem.setSubStatus(RosterItem.SUB_BOTH); RosterManager.getRosterItemProvider().updateItem(toUserName, rosterItem); break; } } } Cache cache[] = CacheFactory.getAllCaches(); if (cache != null){ for (Cache cache2 : cache) { if("Roster".equals(cache2.getName())){ cache2.clear(); break; } } } } catch (Exception e) { e.printStackTrace(); } throw new PacketRejectedException(); }
而在其中,缓存的刷新尤其重要,不然,只有重启服务器,你才能看到两个好友之间才是真正的订阅关系的!
相关推荐
openfire添加好友流程梳理:unavailable, 下线;subscribe, 订阅;subscribed, 同意订阅;unsubscribe, 取消订阅;unsubscribed, 拒绝订阅;probe,探测;error;错误
openfire好友关系解析,包括数据包及数据库状态。
openfire添加好友离线请求推送
android Openfire的测试客户端程序,只是个测试程序
解决Openfire strophejs网站 跨域访问问题,文件中有flXHR.js、strophe.flxhr.js跨域脚本,有个具体实例basic.html供参考
strophe注册插件,xmpp ,openfire服务器,带内注册
Openfire数据结构详解
Openfire最主要的功能是实现XMPP服务器,Openfire的核心功能可以概括为:连接管理、消息解析、消息路由、消息发送.
基于openfire的Android聊天软件 ,可注册 登陆 聊天 查找 添加好友
openfire使用hazelCast集群
openfire简介.pdf openfire简介.pdf
openfire webchat开发包!
openfire mac系统安装文件 Openfire (formerly Wildfire) is a cross-platform real-time collaboration server based on the XMPP (Jabber) protocol.
openfire 下载
Jwchat+openfire部署 Jwchat(验证成功)
openfire mac版本 openfire mac版本 openfire mac版本
openfire集群jar包
先说一下为什么要写这篇博客,是因为本人在周末在研究XMPP和OpenFire,从网上下载了个Demo,但跑不起来,花了很长时间,经改造后,跑起来了,写个篇博文也是希望后边学习XMPP和OpenFire的同学下载后直接运行,少走...
NULL 博文链接:https://baobeituping.iteye.com/blog/1458842
非常详细的openfire的表结构介绍,能够帮助你对openfire的表结构信息由清晰的认识