分享

openfire 自动添加好友

 WindySky 2016-02-24

根据openfire源码的提供,其中SubscriptionPlugin这个插件已经实现了自动添加了好友的功能,但好我项目的的要求还是有些不一样,我根据源码中的内容自己编写了一个插件,关键代码如下:

Java代码  收藏代码
  1. public static void acceptSubscription(Packet packet ,PresenceRouter router) throws PacketRejectedException {  
  2.     String serverName = XMPPServer.getInstance().getServerInfo().getXMPPDomain();  
  3.        if (getSubscriptionLevel().equals(LOCAL)) {  
  4.            String toDomain = packet.getTo().getDomain();  
  5.            String fromDomain = packet.getFrom().getDomain();  
  6.   
  7.            if (!toDomain.equals(serverName) || !fromDomain.equals(serverName)) {  
  8.                return;  
  9.            }  
  10.        }  
  11.        Presence presence = new Presence();  
  12.        presence.setType(Presence.Type.subscribed);  
  13.        presence.setTo(packet.getTo());  
  14.        presence.setFrom(packet.getFrom());  
  15.        router.route(presence);  
  16.          
  17.        String toUserName = packet.getTo().getNode();  
  18.        try {  
  19.         // 获取昵称  
  20.         String nickName = UserManager.getInstance().getUser(toUserName).getName();  
  21.         if (nickName == null || nickName.trim().length() == 0){  
  22.             nickName = packet.getFrom().getNode();  
  23.         }  
  24.           
  25.         // 添加一个分组为fans的名  
  26.         List<String> groups = new ArrayList<String>();  
  27.            groups.add("fans");  
  28.         RosterItem item = new RosterItem(packet.getFrom(), RosterItem.SUB_BOTH, RosterItem.ASK_NONE, RosterItem.RECV_NONE, nickName, groups);  
  29.         RosterManager.getRosterItemProvider().createItem(toUserName, item);  
  30.           
  31.           
  32.         // 将状态设置为 “相互为好友”  
  33.         Iterator<RosterItem>  rosterItemIterator= RosterManager.getRosterItemProvider().getItems(packet.getFrom().getNode());  
  34.         if (rosterItemIterator != null){  
  35.             while (rosterItemIterator.hasNext()) {  
  36.                 RosterItem rosterItem = (RosterItem) rosterItemIterator.next();  
  37.                 if (toUserName.equals(rosterItem.getJid().getNode())){  
  38.                     rosterItem.setSubStatus(RosterItem.SUB_BOTH);  
  39.                     RosterManager.getRosterItemProvider().updateItem(toUserName, rosterItem);  
  40.                     break;  
  41.                 }  
  42.             }  
  43.         }  
  44.           
  45.         Cache cache[] = CacheFactory.getAllCaches();  
  46.         if (cache != null){  
  47.             for (Cache cache2 : cache) {  
  48.                 if("Roster".equals(cache2.getName())){  
  49.                     cache2.clear();  
  50.                     break;  
  51.                 }  
  52.             }  
  53.         }  
  54.     } catch (Exception e) {  
  55.         e.printStackTrace();  
  56.     }  
  57.        throw new PacketRejectedException();  
  58.    }  

 

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多