• 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行


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    排列数组所有情况
    查到的结果的某个字段在一串字符串之中
    element组件化跳转和路由式跳转
    vue路由and组件操作
    事件 绑定,取消冒泡,拖拽 ,点击,事件委托习题
    窗口属性 和DOM 元素尺寸位置 及习题加强
    DOM树的增删改查 和 Date定时任务
    JS DOM 初做了解,习题笔记
    struts配置及检验
    第一个JSP登录跳转
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4663452.html
Copyright © 2020-2023  润新知