`
shendixiong
  • 浏览: 399788 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

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

 

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

分享到:
评论

相关推荐

    openfire Im android 客户端

    3. **联系人管理**:用户可以查看和管理自己的联系人列表,添加新的好友,同时可以查看好友的状态,了解他们是否在线。 4. **群聊功能**:支持创建和参与群组聊天,方便团队协作或社交交流。 5. **离线消息**:...

    XMPP_OPenfire即时通讯IM-android版

    6. **添加好友**: 添加好友需要发送一个添加请求(`&lt;presence type="subscribe"&gt;`),等待对方同意(`&lt;presence type="subscribed"&gt;`)后,双方就可以互发消息了。 7. **修改密码**: 这个功能通常需要通过Openfire...

    仿照微信的即时通讯ios客户端,后台为openfire

    3. **好友系统**:模仿微信,我们需要实现添加好友、查看好友列表、接受/拒绝好友请求等功能。这涉及到处理XMPPRoster(好友列表)的相关XEPs,如XEP-0030(Service Discovery)和XEP-0163(Personal Eventing via ...

    基于xmpp openfire smack开发之Android客户端开发

    3.添加,删除好友 4.添加,移动好友分组 5.设置昵称 6.监控好友状态 7.网络断开系统自动重连接 8.收到添加好友请求消息处理 9.收到系统广播消息处理 10.查看历史聊天记录 11.消息弹出提醒,和小气泡 .... 因为时间...

    OpenFire+Spark部署安装图解

    5. **添加好友**:在其他设备上重复以上步骤,新用户可以添加为好友,从而进行聊天和文件传输。 **后续开发与定制** Spark作为一个开源项目,允许企业根据自身需求进行二次开发。这可能包括但不限于修改用户界面、...

    XMPP开发Openfire详细介绍

    - 客户可通过客户端添加工作组为好友并发起聊天。 - 客服人员收到聊天请求后,可选择接受或拒绝。 - 接受后,系统自动创建聊天室,双方进入客服聊天过程。 #### 四、XMPP协议解析 ##### 4.1 XMPP协议原理 XMPP...

    基于Openfier服务器的仿QQ聊天软件

    - 好友系统:客户端需要维护一个好友列表,用户可以搜索、添加和删除好友。这涉及到在服务器上操作用户关系数据。 3. **二维码扫描功能** - 二维码生成与解析:集成开源的二维码库,如ZXing(Zebra Crossing),...

    Android XMPP好友列表+聊天

    还可以实现添加、删除好友的接口。 5. **聊天功能**:创建聊天会话类,使用Message类发送和接收消息。XEP-0092定义了历史消息的查询方法,可以用于加载聊天记录。实现发送按钮点击事件,将输入框中的文字转换为...

    打造自己的i2p匿名通信1

    添加好友时,需使用好友的用户名@你的域名格式。 此外,Openfire服务器的设置可以根据需要调整,例如关闭离线消息、文件传输等功能以减轻服务器负载,但群组功能通常被视为IM的基本功能,不建议关闭。对于更全面的...

    Android聊天项目D3Xmpp.zip

    isAutoSend为true时自动截图FriendActivity—- 好友详情页。必须参数usernameLoginActivity—- 登陆页。MainActivity—- 主页。使用fragments包住四个TAB页面MapActivity—- 地图页. 从聊天页的位置跳到此页面。必须...

    Android应用源码基于XMPP的即时聊天项目.rar

    通过发送和接收这些对象,应用可以实现添加好友、查看在线状态、发送和接收消息等功能。 总之,这个项目提供了一个完整的Android即时通讯应用的实现,涉及了Android开发、Java编程、XMPP协议、Openfire服务器和...

    android im

    使用Android Studio的调试工具,如Logcat查看日志,模拟器或真机进行功能测试,JUnit或Espresso进行自动化测试,确保应用在各种设备和Android版本上的兼容性。 综上所述,开发Android IM应用涉及了服务器端Openfire...

    ios-xmpp聊天界面.zip

    本项目“ios-xmpp聊天界面.zip”提供了实现QQ登录、注册、添加好友、删除好友以及发送消息功能的基础框架。下面将详细介绍XMPP在iOS中的应用及其相关知识点。 1. **XMPP简介** - XMPP是基于XML的开放标准,用于在...

    smack API

    这可能涉及到用户注册和登录、好友添加、消息收发、群聊管理等多个环节。通过阅读Smack的官方文档,参考示例代码,以及参与社区讨论,可以加速学习过程,更好地理解和运用这个强大的API。 总的来说,Smack API是...

    Android版支持XMPP协议IM客户端源代码

    6. **事件监听**: 监听并响应用户的操作,例如添加好友、删除联系人、更改个人资料等。 7. **UI设计**: 创建直观且用户友好的界面,让用户能够轻松地进行聊天、查看联系人列表和管理账户设置。 8. **错误处理和重...

    WeChat:基于XMPP模仿微信App进行IM(即时聊天)开发,并适配iPad、iOS7。(暂停开发,有空再讲……)

    2. **好友列表与添加好友**:用户需要能够查看和管理好友列表,通过搜索或扫描二维码等方式添加新好友。 3. **实时消息传递**:使用XMPP框架的核心功能,实现实时文本、图片、文件等消息的发送与接收,同时支持消息...

Global site tag (gtag.js) - Google Analytics