openfire 自动添加好友

根据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();
    }

而在其中,缓存的刷新尤其重要,不然,只有重启服务器,你才能看到两个好友之间才是真正的订阅关系的!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值