PC结束 Spark 二次开发 收到自己主动,并允许好友请求
本次Spark二次开发是为了客服模块的开发, 能让用户一旦点击该客服则直接自己主动加入好友。而客服放则需自己主动加入好友,不同弹出对话框进行允许,这方便的广大客服。
如今废话不多说,直接上代码。
package org.jivesoftware.spark.ui; import java.util.ArrayList; import org.jivesoftware.spark.util.log.Log;
import org.jivesoftware.spark.util.ModelUtil;
import org.jivesoftware.resource.Res;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.RosterGroup;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.packet.RosterPacket;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.spark.SparkManager;
import org.jivesoftware.spark.UserManager; /**
* 处理全部订阅请求
* @author jian
*
*/
public class MySubscription {
private String jid;
//构造函数
public MySubscription(){
}
/**
* 调用
* @param jid 主键ID
*/
public void invoke(final String jid){
this.jid=jid;
final Roster roster=SparkManager.getConnection().getRoster();//返回好友冊
//假设用户已经在好友其中,则不显示
RosterEntry entry=roster.getEntry(jid);//返回相应的用户
if(entry!=null&&entry.getType()==RosterPacket.ItemType.to){
Presence response=new Presence(Presence.Type.subscribed);
response.setTo(jid);
SparkManager.getConnection().sendPacket(response);
return;
}
UserManager userManager=SparkManager.getUserManager();
String username=userManager.getNickname(userManager.getFullJID(jid));
username=username==null? StringUtils.parseName(UserManager.unescapeJID(jid)):username;//给usernam赋值
boolean addEntry=addEntry(username);
GetGroupName();
if(addEntry){
Presence response=new Presence(Presence.Type.subscribed);
response.setTo(jid);
SparkManager.getConnection().sendPacket(response);
}
}
/**
* 允许加入好友
*/
private boolean addEntry(String username){
String errorMessage=Res.getString("title.error");
String groupName="Friends"; //获取该用户组是否存在
ContactGroup contactGroup=SparkManager.getWorkspace().getContactList().getContactGroup(groupName);
boolean isSharedGroup = contactGroup!=null&&contactGroup.isSharedGroup();
System.out.println("用户组存在?"+isSharedGroup);
if(isSharedGroup){
errorMessage=Res.getString("message.cannot.add.contact.to.shared.group");
}else if(!ModelUtil.hasLength(username)){
errorMessage=Res.getString("message.specify.contact.jid");
}else if(!ModelUtil.hasLength(groupName)){
errorMessage=Res.getString("message.specify.group");
}else if(ModelUtil.hasLength(username)&&ModelUtil.hasLength(groupName)&&!isSharedGroup){
System.out.println("加入好友");
System.out.println("直接输出Group组:"+groupName);
addEntity(jid, username, groupName);
return true;
}
return false;
} /**
* 把新用户加入到好友名单
* @param jid 账号
* @param username 昵称
* @param groupName 组名
*/
private RosterEntry addEntity(String jid,String username,String groupName){
String[] groups={groupName};
System.out.println("開始加入了哦");
for(int i=0;i<groups.length;i++){
System.out.println(groups[i]);
}
Roster roster=SparkManager.getConnection().getRoster();
RosterEntry userEntry=roster.getEntry(jid);
boolean isSubscribed=true;
if(userEntry!=null){
isSubscribed=userEntry.getGroups().size()==0;
}
if(isSubscribed){
try {
roster.createEntry(jid, username, new String[]{groupName});
} catch (XMPPException e) {
Log.error("不能加入新的好友"+jid,e);
}
return roster.getEntry(jid);
}
try {
RosterGroup rosterGroup=roster.getGroup(groupName);
if(rosterGroup==null){
rosterGroup=roster.createGroup(groupName);
}
if(userEntry==null){
roster.createEntry(jid, username, groups);
userEntry=roster.getEntry(jid);
}else {
userEntry.setName(username);
rosterGroup.addEntry(userEntry);
}
userEntry=roster.getEntry(jid);
} catch (XMPPException ex) {
Log.error(ex);
}
return userEntry;
} private void GetGroupName(){
ArrayList<String> list=new ArrayList<String>();
for(ContactGroup group:SparkManager.getWorkspace().getContactList().getContactGroups()){
if(!group.isOfflineGroup()&&!"Unfiled".equalsIgnoreCase(group.getGroupName())&&!group.isSharedGroup()){
list.add(group.getGroupName());
System.out.println(group.getGroupName());
}
}
}
}
而在加入好友所用的类:org.jivesoftware.spark.ui.SubscriptionDialog.java
而监听并调用的类为:org.jivesoftware.spark.ui.ContactList.java
第2134行
版权声明:本文博客原创文章。博客,未经同意,不得转载。
PC结束 Spark 二次开发 收到自己主动,并允许好友请求的更多相关文章
- openfire spark 二次 开发 服务插件
==================== 废话 begin ============================ 最近老大让我为研发平台增加即时通讯功能.告诉我用comet 在web端实现即 ...
- shop_z 一套非常适合二次开发的php后台管理系统
QQ群:247823727 如果你需要定制某些功能开联系群主,价格实惠,后期交接完善,有上手培训 shop_z基础thinkphp5 php7上开发运行,速度杠杠的 地址:https://gitee ...
- 【基于spark IM 的二次开发笔记】第一天 各种配置
[基于spark IM 的二次开发笔记]第一天 各种配置 http://juforg.iteye.com/blog/1870487 http://www.igniterealtime.org/down ...
- [PC]PHPCMS二次开发指南(上)
------------------------------------------------------------------------------------- PHPCMS本身功能已经很完 ...
- 大数据笔记(二十八)——执行Spark任务、开发Spark WordCount程序
一.执行Spark任务: 客户端 1.Spark Submit工具:提交Spark的任务(jar文件) (*)spark提供的用于提交Spark任务工具 (*)example:/root/traini ...
- E8.Net 工作流二次开发架构平台
一. 产品简介 E8.Net工作流开发架构是基于微软.Net技术架构的工作流中间件产品,是国内商业流程管理(BPM)领域在.Net平台上的领先产品,是快速搭建流程管理解决方案的二次开 ...
- SVN二次开发——让SVN、TSVN(TortoiseSVN)支持windows的访问控制模型、NTFS ADS(可选数据流、NTFS的安全属性)
SVN二次开发 ——让SVN.TSVN(TortoiseSVN)支持windows的访问控制模型.NTFS ADS (可选数据流.NTFS的安全属性) SVN secondary developmen ...
- Linux内核启动代码分析二之开发板相关驱动程序加载分析
Linux内核启动代码分析二之开发板相关驱动程序加载分析 1 从linux开始启动的函数start_kernel开始分析,该函数位于linux-2.6.22/init/main.c start_ke ...
- (5)微信二次开发 之 XML格式数据解析
1.首先理解一下html html的全名是:HyperText Transfer markup language 超级文本标记语言,html本质上是一门标记(符合)语言,在html里,这些标记是事先定 ...
随机推荐
- vs2012 它已停止工作 - 解决方案
最近学习<Windows多媒体编程>本课程, 蛋疼, 学校原来是MFC... 然后安装vs2012. 后来又在几个插件.. 在这个问题. 开业,提示 vs2012 它已停止工作. wa ...
- android面试题 不单单为了面试也是一次非常好的学习
以以下试题都是在网上找的总结出来的,谢谢大家的分享!希望,我们共同进步,找到自己梦想的公司: 1.android dvm 的进程和Linux的进程,应用程序的进程是否为同一个概念: 答:dvm是dal ...
- MIT 操作系统实验 MIT JOS lab2
MIT JOS lab2 首先把内存分布理清楚,由/boot/main.c可知这里把kernel的img的ELF header读入到物理地址0x10000处 这里能够回想JOS lab1的一个小问.当 ...
- JQuery Easy Ui (Tree树)详解(转)
第一讲:JQuery Easy Ui到底是什么呢? 首先咱们知道JQuery是对Java Script的封装,是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等.. JQuery ui是在j ...
- AC自己主动机 总结
模板--参考六如家培训指南 /*===============================*\ 依照训练指南写的 \*===============================*/ #incl ...
- 实现能够直接粘QQ贴截图的bug管理功能
对于一个功能强大的协作平台来说,todo管理和bug管理是不可缺少的功能.Todo和bug往往不是通过一些简单的文字就能实现的,有时候须要配以图片的说名,之前用过的项目管理平台都是以附件的形式上传图片 ...
- 三种方式上传文件-Java
前言:负责,因为该项目他(jetty嵌入式开始SpringMvc)实现文件上传的必要性,并拥有java文件上传这一块还没有被曝光.并 Http 更多晦涩协议.因此,这种渐进的方式来学习和实践上载文件的 ...
- Mean Shift简介
Mean Shift,我们 翻译“平均漂移”. 其集群,图像平滑. 图像分割和跟踪已广泛应用.因为我现在认为追踪,因此推出Mean Shift该方法用于目标跟踪.从而MeanShift較全面的介绍. ...
- 九度OJ 1177 查找 (模拟)
题目1177:查找 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5659 解决:1667 题目描写叙述: 读入一组字符串(待操作的),再读入一个int n记录记下来有几条命令,总共同拥有 ...
- cocos2d-x路~使得第一个字游戏(一个)
前言 去年的回忆.另外,在第三.他们开发了他们的第一场比赛四月,它是游戏.所以我决定走上独立开发的道路上.了.第一款游戏达到它应有的盈利水平.然而这款游戏开发后的时间里.都没再取得还有一款令自己惬意的 ...