⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qqclient.java

📁 类似于MSN
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	        AddFriendAuthPacket packet = new AddFriendAuthPacket();
	        packet.setTo(qqNum);
	        packet.setType(QQ.QQ_MY_AUTH_APPROVE);
	        monitor.putRequest(packet);
    		port.add(packet);
    	}
    }
    
    /**
     * 创建一个临时群
     * @param name 群名称
     * @param notice 群声明
     * @param description 群描述
     * @param members 成员QQ号数组
     * @param category 群的分类
     */
    public void createTemporaryCluster(String name, String notice, String description, int[] members, int category) {
    	if(user.isLoggedIn()) {
    		ClusterCreatePacket packet = new ClusterCreatePacket();
    		packet.setType(QQ.QQ_CLUSTER_TYPE_TEMPORARY);
    		packet.setCategory((char)category);
    		packet.setName(name);
    		packet.setNotice(notice);
    		packet.setDescription(description);
    		packet.setMembers(members);
    		monitor.putRequest(packet);
    		port.add(packet);
    	}
    }
    
    /**
     * 创建一个固定群
     * @param name 群名称
     * @param notice 群声明
     * @param description 群描述
     * @param members 群成员
     * @param authType 群认证类型
     * @param category 群的分类
     */
    public void createPermanentCluster(String name, String notice, String description, int[] members, int category, byte authType) {
    	if(user.isLoggedIn()) {
    		ClusterCreatePacket packet = new ClusterCreatePacket();
    		packet.setType(QQ.QQ_CLUSTER_TYPE_PERMANENT);
    		packet.setAuthType(authType);
    		packet.setCategory((char)category);
    		packet.setName(name);
    		packet.setNotice(notice);
    		packet.setDescription(description);
    		packet.setMembers(members);
    		monitor.putRequest(packet);
    		port.add(packet);
    	}
    }
    
    /**
     * 请求群的信息
     * @param clusterId 群内部ID
     */
    public void getClusterInfo(int clusterId) {
    	if(user.isLoggedIn()) {
    		ClusterGetInfoPacket packet = new ClusterGetInfoPacket();
    		packet.setClusterId(clusterId);
    		monitor.putRequest(packet);
    		port.add(packet);
    	}
    }
    
    /**
     * 得到群的在线成员
     * @param clusterId
     */
    public void getClusterOnlineMember(int clusterId) {
    	if(user.isLoggedIn()) {
    		ClusterGetOnlineMemberPacket packet = new ClusterGetOnlineMemberPacket();
    		packet.setClusterId(clusterId);
    		monitor.putRequest(packet);
    		port.add(packet);
    	}
    }
    
    /**
     * 激活群
     * @param clusterId
     */
    public void activateCluster(int clusterId) {
    	if(user.isLoggedIn()) {
    		ClusterActivatePacket packet = new ClusterActivatePacket();
    		packet.setClusterId(clusterId);
    		monitor.putRequest(packet);
    		port.add(packet);
    	}
    }
    
    /**
     * 得到群中成员的信息
     * @param clusterId 群的内部ID
     * @param members 成员的QQ号列表,元素类型是Integer
     */
    public void getClusterMemberInfo(int clusterId, List members) {
    	if(user.isLoggedIn()) {
    		// 由于一次最多只能得到61个成员的信息,所以这里按照30个成员一组进行拆分
    		//     因为QQ是一次拆这么多
    		int size = members.size();
    		int times = (size + 29) / 30;
    		for(int i = 0; i < times; i++) {
	    		ClusterGetMemberInfoPacket packet = new ClusterGetMemberInfoPacket();
	    		packet.setClusterId(clusterId);
    			for(int j = 30 * i; j < 30 * i + 30 && j < size; j++)
    				packet.addMember((Integer)members.get(j));
	    		monitor.putRequest(packet);
	    		port.add(packet);   			    				
    		}
    	}
    }
    
    /**
     * 修改临时群信息
     * @param clusterId 群内部ID
     * @param name 群名称
     * @param notice 群声明 
     * @param description 群简介
     * @param members 群成员
     * @param category 群分类
     */
    public void modifyTemporaryClusterInfo(int clusterId, String name, String notice, String description, int[] members, int category) {
    	if(user.isLoggedIn()) {
    		ClusterModifyInfoPacket packet = new ClusterModifyInfoPacket();
    		packet.setClusterId(clusterId);
    		packet.setName(name);
    		packet.setType(QQ.QQ_CLUSTER_TYPE_TEMPORARY);
    		packet.setNotice(notice);
    		packet.setDescription(description);
    		packet.setMembers(members);
    		packet.setCategory((char)category);
       		monitor.putRequest(packet);
	        port.add(packet);
    	}
    }
    
    /**
     * 修改固定群信息
     * @param clusterId 群的内部ID
     * @param name 群名称
     * @param notice 群声明
     * @param description 群简介
     * @param members 群成员
     * @param category 群分类
     * @param authType 群认证类型
     */
    public void modifyPermanentClusterInfo(int clusterId, String name, String notice, String description, int[] members, int category, byte authType) {
    	if(user.isLoggedIn()) {
    		ClusterModifyInfoPacket packet = new ClusterModifyInfoPacket();
    		packet.setClusterId(clusterId);
    		packet.setName(name);
    		packet.setType(QQ.QQ_CLUSTER_TYPE_PERMANENT);
    		packet.setNotice(notice);
    		packet.setDescription(description);
    		packet.setMembers(members);
    		packet.setCategory((char)category);
    		packet.setAuthType(authType);
    		monitor.putRequest(packet);
	        port.add(packet);
    	}
    }
    
    /**
     * 发送群消息
     * @param clusterId 群内部ID
     * @param message 消息内容
     */
    public void sendClusterMessage(int clusterId, String message) {
    	if(user.isLoggedIn()) {
    		ClusterSendIMPacket packet = new ClusterSendIMPacket();
    		packet.setClusterId(clusterId);
    		packet.setMessage(message);
    		monitor.putRequest(packet);
    		port.add(packet);
    	}
    }
    
    /**
     * 退出一个群
     * @param clusterId 群内部ID
     */
    public void exitCluster(int clusterId) {
    	if(user.isLoggedIn()) {
    		ClusterExitPacket packet = new ClusterExitPacket();
    		packet.setClusterId(clusterId);
    		monitor.putRequest(packet);
    		port.add(packet);
    	}
    }
    
    /**
     * 根据外部ID搜索群
     * @param externalId 群的外部ID
     */
    public void searchClusterById(int externalId) {
    	if(user.isLoggedIn()) {
    		ClusterSearchPacket packet = new ClusterSearchPacket();
    		packet.setExternalId(externalId);
    		packet.setSearchType(QQ.QQ_SEARCH_CLUSTER_BY_ID);
    		monitor.putRequest(packet);
    		port.add(packet);
    	}
    }
    
    /**
     * 搜索示范群
     */
    public void searchDemoCluster() {
    	if(user.isLoggedIn()) {
    		ClusterSearchPacket packet = new ClusterSearchPacket();
    		packet.setSearchType(QQ.QQ_SEARCH_DEMO_CLUSTER);
    		monitor.putRequest(packet);
    		port.add(packet);
    	}
    }
    
    /**
     * 加入群
     * @param clusterId
     */
    public void joinCluster(int clusterId) {
    	if(user.isLoggedIn()) {
    		ClusterJoinPacket packet = new ClusterJoinPacket();
    		packet.setClusterId(clusterId);
    		monitor.putRequest(packet);
    		port.add(packet);
    	}
    }
    
    /**
     * 请求加入群
     * @param clusterId 群内部ID
     * @param message 请求的附加信息
     */
    public void requestJoinCluster(int clusterId, String message) {
    	if(user.isLoggedIn()) {
    		ClusterAuthPacket packet = new ClusterAuthPacket();
    		packet.setType(QQ.QQ_CLUSTER_AUTH_REQUEST);
    		packet.setClusterId(clusterId);
    		packet.setMessage(message);
    		monitor.putRequest(packet);
    		port.add(packet);
    	}
    }
    
    /**
     * 同意加入群
     * @param clusterId
     */
    public void approveJoinCluster(int clusterId) {
    	if(user.isLoggedIn()) {
    		ClusterAuthPacket packet = new ClusterAuthPacket();
    		packet.setType(QQ.QQ_CLUSTER_AUTH_APPROVE);
    		packet.setClusterId(clusterId);
      		monitor.putRequest(packet);
    		port.add(packet);
    	}
    }
    
    /**
     * 拒绝加入群
     * @param clusterId
     * @param message
     */
    public void rejectJoinCluster(int clusterId, String message) {
    	if(user.isLoggedIn()) {
    		ClusterAuthPacket packet = new ClusterAuthPacket();
    		packet.setType(QQ.QQ_CLUSTER_AUTH_REJECT);
    		packet.setClusterId(clusterId);
    		packet.setMessage(message);    
    		monitor.putRequest(packet);
    		port.add(packet);
    	}
    }
    
    /**
     * 修改用户的个人信息
     * @param oldPassword 老密码,如果不修改密码,设成null
     * @param newPassword 新密码,如果不修改密码,设成null
     * @param contactInfo 其他信息
     */
    public void modifyInfo(String oldPassword, String newPassword, ContactInfo contactInfo) {
    	if(user.isLoggedIn()) {
	        ModifyInfoPacket packet = new ModifyInfoPacket();
	        packet.setOldPassword(oldPassword);
	        packet.setNewPassword(newPassword);
	        for(int i = 1; i < QQ.QQ_CONTACT_FIELDS; i++) {
	            if(contactInfo.infos[i].equals("-"))
	                contactInfo.infos[i] = "";
	        }
	        packet.setContactInfo(contactInfo);
	        monitor.putRequest(packet);
    		port.add(packet);  		
    	}
    }
    
    /**
     * 得到一个用户的详细信息
     * @param qqNum 想要得到的用户QQ号
     */
    public void getUserInfo(int qqNum) {
    	if(user.isLoggedIn()) {
	        GetUserInfoPacket packet = new GetUserInfoPacket();
	        packet.setQQ(qqNum);
    		port.add(packet);  		
    	}
    }
	
	/**
	 * 请求取得好友名单,如果成功,将会触发get friend list success和
	 * get friend list end事件,用户需要监听这两个事件来得到所有的
	 * 好友信息
	 */
	public void getFriendList() {
		if(user.isLoggedIn()) {
			// 请求取得好友名单
			GetFriendListPacket packet = new GetFriendListPacket();
    		port.add(packet);		
		}
	}
	
	/**
	 * 请求取得好友名单,position指定了名单开始的偏移,建议初级用户不要使用此API
	 * @param position
	 */
	public void getFriendList(char position) {
		if(user.isLoggedIn()) {
			// 请求取得好友名单
			GetFriendListPacket packet = new GetFriendListPacket();
			packet.setStartPosition(position);
    		port.add(packet);		
		}
	}
	
    /**
     * 请求取得当前在线好友列表,如果成功,将会触发get online friend success
     * 和get online friend end事件,用户需要监听这两个事件来得到所有的在线
     * 好友
     */
    public void getFriendOnline() {
    	if(port != null) {
	        GetFriendOnlinePacket packet = new GetFriendOnlinePacket();
    		port.add(packet);		
    	}
    }
    
    /**
     * 使我的状态改变成在线
     */
    public void makeMeOnline() {
    	if(user.isLoggedIn() && port != null) {
	        user.setStatus(QQ.QQ_FRIEND_STATUS_ONLINE);
	    	ChangeStatusPacket packet = new ChangeStatusPacket();
    		port.add(packet);       
    	}
    }
    
    /**
     * 使我的状态改变成离开
     */
    public void makeMeAway() {
    	if(user.isLoggedIn() && port != null) {
	        user.setStatus(QQ.QQ_FRIEND_STATUS_AWAY);
	    	ChangeStatusPacket packet = new ChangeStatusPacket();
    		port.add(packet);  	        
    	}
    }
    
    /**
     * 使我的状态改变为隐身
     */
    public void makeMeHidden() {
    	if(user.isLoggedIn() && port != null) {
	        user.setStatus(QQ.QQ_FRIEND_STATUS_HIDDEN);
	    	ChangeStatusPacket packet = new ChangeStatusPacket();
    		port.add(packet);  		    	        
    	}
    }
    
    /**
     * 请求密钥
     * @param request
     */
    public void requestKey(byte request) {
        if(user.isLoggedIn() && port != null) {
			RequestKeyPacket packet = new RequestKeyPacket();
			packet.setRequest(request);
			monitor.putRequest(packet);
			port.add(packet);
        }
    }
    
    /**
     * 通用方法,发送一个packet,注意packet必须已经执行过finalizeMessage
     * 这个方法用在一些包构造比较复杂的情况下,比如上传分组信息这种包,
     * 包中数据的来源是无法知道的也不是用几个参数就能概括的,可能也和实现有关。
     * @param packet OutPacket子类
     */
    public void sendPacket(OutPacket packet) {
    	if(user.isLoggedIn() && port != null) {
    		monitor.putRequest(packet);
    		port.add(packet);
    	}
    }
    
    /**
     * 添加一个QQ事件监听器
     * @param listener QQListener
     */
    public void addQQListener(QQListener listener) {
    	if(qqListeners.contains(listener)) return;
    	if(port != null)
    	    port.addQQListener(listener);
    	if(pp != null)
    		pp.addQQListener(listener);
    	qqListeners.add(listener);
    }
    
    /**
     * 执行一些退出会话的清楚工作
     * @param port
     * @param thread
     */
    private void clean(KeepAliveThread thread, IPort port) {
        CleanRunnable cleanRunnable = new CleanRunnable(thread, port);
        new Thread(cleanRunnable).start();
    }

    /**
     * @return 登陆服务器IP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -