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

📄 basicfamilyprocessor.java

📁 lumaQQ的源文件
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
            e = new QQEvent(policy.retrieveSent(packet));
            e.type = QQEvent.QQ_DELETE_FRIEND_FAIL;
            client.fireQQEvent(e);
        } else {
            log.debug("好友删除成功");
            e = new QQEvent(policy.retrieveSent(packet));
            e.type = QQEvent.QQ_DELETE_FRIEND_SUCCESS;
            client.fireQQEvent(e);
        }
    }

    /**
     * 处理请求加一个好友的回复包
     * 
     * @param in
     */
    private void processAddFriendExReply(BasicInPacket in) {
        QQEvent e;
        AddFriendExReplyPacket packet = (AddFriendExReplyPacket)in;
        if(packet.replyCode == QQ.QQ_REPLY_OK) {
        	switch(packet.authCode) {
        		case QQ.QQ_AUTH_NO:
                    log.debug("好友添加成功");
                    e = new QQEvent(packet);
                    e.type = QQEvent.QQ_ADD_FRIEND_SUCCESS;
                    client.fireQQEvent(e);
                    break;
        		case QQ.QQ_AUTH_NEED:
                    log.debug("对方要求认证");
                    e = new QQEvent(packet);
                    e.type = QQEvent.QQ_ADD_FRIEND_NEED_AUTH;
                    client.fireQQEvent(e);
                    break;
        		case QQ.QQ_AUTH_REJECT:
                    log.debug("对方禁止别人加他为好友");
                    e = new QQEvent(packet);
                    e.type = QQEvent.QQ_ADD_FRIEND_DENY;
                    client.fireQQEvent(e);
                    break;
        	}
        } else if(packet.replyCode == QQ.QQ_REPLY_ADD_FRIEND_ALREADY) {
            log.debug("对方已经是自己的好友");
            e = new QQEvent(packet);
            e.type = QQEvent.QQ_ADD_FRIEND_ALREADY;
            client.fireQQEvent(e);
        } else {
            log.debug("添加好友失败");
            e = new QQEvent(packet);
            e.type = QQEvent.QQ_ADD_FRIEND_FAIL;
            client.fireQQEvent(e);
        }
    }

    /**
     * 处理系统消息,比如谁谁谁添加你为好友
     * 
     * @param in
     */
    private void processSystemNotification(BasicInPacket in) {
        QQEvent e = null;
        SystemNotificationPacket packet = (SystemNotificationPacket)in;
        // 判断类型
        switch(packet.type) {
        	case QQ.QQ_SYS_BEING_ADDED:
    	        e = new QQEvent(packet);
                e.type = QQEvent.QQ_ADDED_BY_OTHERS;   
                break;
        	case QQ.QQ_SYS_ADD_FRIEND_REQUEST:
                e = new QQEvent(packet);
                e.type = QQEvent.QQ_REQUEST_ADD_ME;
                break;
        	case QQ.QQ_SYS_ADD_FRIEND_APPROVED:
                e = new QQEvent(packet);
                e.type = QQEvent.QQ_REQUEST_ADD_OTHER_APPROVED;
                break;
        	case QQ.QQ_SYS_ADD_FRIEND_REJECTED:
                e = new QQEvent(packet);
                e.type = QQEvent.QQ_REQUEST_ADD_OTHER_REJECTED;
                break;
        	case QQ.QQ_SYS_ADVERTISEMENT:
                e = new QQEvent(packet);
                e.type = QQEvent.QQ_RECEIVE_ADVERTISEMENT;
                break;
        	case QQ.QQ_SYS_BEING_ADDED_EX:
    	        e = new QQEvent(packet);
                e.type = QQEvent.QQ_ADDED_BY_OTHERS_EX;   
                break;
        	case QQ.QQ_SYS_ADD_FRIEND_REQUEST_EX:
            	e = new QQEvent(packet);
            	e.type = QQEvent.QQ_REQUEST_ADD_ME_EX;
            	break;
        	case QQ.QQ_SYS_ADD_FRIEND_APPROVED_AND_ADD:
        		e = new QQEvent(packet);
        		e.type = QQEvent.QQ_REQUEST_ADD_OTHER_APPROVED_AND_ADD;
        		break;
            default:
            	log.debug("未知类型的系统通知,忽略");
            	break;
        }
        // 触发事件
        if(e != null)
            client.fireQQEvent(e);
    }

    /**
     * 处理未知命令,没有实际操作,简单打印内容
     * 
     * @param in
     */
    private void processRequestKeyReply(BasicInPacket in) {
        RequestKeyReplyPacket packet = (RequestKeyReplyPacket)in;
        QQEvent e;
        if(packet.replyCode == QQ.QQ_REPLY_OK) {
	        e = new QQEvent(packet);            
            e.type = QQEvent.QQ_REQUEST_KEY_SUCCESS;
	        client.fireQQEvent(e);
        } else {
	        e = new QQEvent(policy.retrieveSent(packet));            
            e.type = QQEvent.QQ_REQUEST_KEY_FAIL;
	        client.fireQQEvent(e);            
        }
    }

    /**
     * 处理收到的消息
     * 
     * @param in
     */
    private void processReceiveIM(BasicInPacket in) {
        QQEvent e = null;
        if(!(in instanceof ReceiveIMPacket))
            return;
        
        ReceiveIMPacket packet = (ReceiveIMPacket)in;
        if(packet.isDuplicated()) {
            log.debug("收到一条重复消息,发送确认");
            e = new QQEvent(packet);
            e.type = QQEvent.QQ_RECEIVE_DUPLICATED_IM;
            client.fireQQEvent(e);
            return;            
        }
        
        // 开始处理
        switch(packet.header.type) {
        	case QQ.QQ_RECV_IM_FRIEND:
        	case QQ.QQ_RECV_IM_STRANGER:
                e = new QQEvent(packet);
            	switch(packet.normalHeader.type) {
            		case QQ.QQ_IM_TYPE_TEXT:
    		            e.type = QQEvent.QQ_RECEIVE_NORMAL_IM;
    		            break;
    		        case QQ.QQ_IM_TYPE_UDP_REQUEST:
    	        		log.debug("对方请求传送文件,协议UDP" + " 传送文件端口:" + packet.fileArgs.majorPort);
    	        		e.type = QQEvent.QQ_REQUEST_SEND_FILE;
    	        		break;
    	        	case QQ.QQ_IM_TYPE_REJECT_UDP_REQUEST:
    	            	log.debug("对方拒绝了传送文件的请求");
    	            	e.type = QQEvent.QQ_REJECT_SEND_FILE;
    	            	break;
    	            case QQ.QQ_IM_TYPE_ACCEPT_UDP_REQUEST:
    	            	log.debug("对方接受了传送文件的请求");
    	            	e.type = QQEvent.QQ_ACCEPT_SEND_FILE;
    	            	break;
    	            case QQ.QQ_IM_TYPE_NOTIFY_IP:
    	            	log.debug("对方告诉我文件发送的IP和端口,其外部IP为" + Util.getIpStringFromBytes(packet.fileArgs.internetIp) +
    	            			" 其外部端口为" + packet.fileArgs.internetPort + " 其主端口为" + packet.fileArgs.majorPort +
    							" 其真实IP为" + Util.getIpStringFromBytes(packet.fileArgs.localIp) +
    							" 其副端口为" + packet.fileArgs.minorPort);
    	            	e.type = QQEvent.QQ_NOTIFY_FILE_TRANSFER_ARGS;
    	            	break;
    	            case QQ.QQ_IM_TYPE_ARE_YOU_BEHIND_FIREWALL:
    	            	log.debug("对方请求自己主动连接他");
    	            	e.type = QQEvent.QQ_REQUEST_ME_CONNECT;
    	            	break;
    	            case QQ.QQ_IM_TYPE_REQUEST_CANCELED:
    	            	log.debug("对方取消了文件传送");
    	            	e.type = QQEvent.QQ_CANCEL_SEND_FILE;
    	            	break;
    	            default:
    	        		log.debug("接受到一条非文本消息,目前无法处理,忽略该消息");
    	        		e.type = QQEvent.QQ_UNKNOWN_TYPE_IM;
    	        		break;
            	}
            	break;
        	case QQ.QQ_RECV_IM_SYS_MESSAGE:
                log.debug("接收到一条系统消息: " + packet.sysMessage);
                if(packet.systemMessageType == QQ.QQ_RECV_IM_KICK_OUT) {
                	e = new QQEvent(packet);
                	e.type = QQEvent.QQ_KICKED_OUT_BY_SYSTEM;
                } else {
    	            e = new QQEvent(packet);	
    	            e.type = QQEvent.QQ_RECEIVE_SYS_MESSAGE;          	
                }
                break;
        	case QQ.QQ_RECV_IM_CLUSTER:
            	e = new QQEvent(packet);
            	e.type = QQEvent.QQ_RECEIVE_CLUSTER_IM;
            	break;
        	case QQ.QQ_RECV_IM_TEMP_CLUSTER:
            	e = new QQEvent(packet);
            	e.type = QQEvent.QQ_RECEIVE_TEMP_CLUSTER_IM;
            	break;
        	case QQ.QQ_RECV_IM_UNKNOWN_CLUSTER:
               	e = new QQEvent(packet);
            	e.type = QQEvent.QQ_RECEIVE_UNKNOWN_CLUSTER_IM;
            	break;
        	case QQ.QQ_RECV_IM_BIND_USER:
        	case QQ.QQ_RECV_IM_MOBILE_QQ:
        	case QQ.QQ_RECV_IM_MOBILE_QQ_2:
        	case QQ.QQ_RECV_IM_MOBILE:
        		log.debug("收到一条短信: " + packet.sms.message);
        		e = new QQEvent(packet);
        		e.type = QQEvent.QQ_RECEIVE_SMS;
        		break;
        	case QQ.QQ_RECV_IM_TEMP_SESSION:
        		log.debug("收到一条临时会话消息: " + packet.tempSessionIM.message);
        		e = new QQEvent(packet);
        		e.type = QQEvent.QQ_RECEIVE_TEMP_SESSION_IM;
        		break;
        	case QQ.QQ_RECV_IM_CREATE_CLUSTER:
        	case QQ.QQ_RECV_IM_ADDED_TO_CLUSTER:
            	log.debug("收到群创建通知");
            	e = new QQEvent(packet);
            	e.type = QQEvent.QQ_I_AM_ADDED_TO_CLUSTER;
            	break;
        	case QQ.QQ_RECV_IM_DELETED_FROM_CLUSTER:
            	log.debug("我被创建者从群中删除");
            	e = new QQEvent(packet);
            	e.type = QQEvent.QQ_I_AM_REMOVED_FROM_CLUSTER;
            	break;
        	case QQ.QQ_RECV_IM_APPROVE_JOIN_CLUSTER:
    			log.debug("对方同意我加入群,附加消息为:" + packet.message);
    			e = new QQEvent(packet);
    			e.type = QQEvent.QQ_REQUEST_JOIN_CLUSTER_APPROVED;
    			break;
        	case QQ.QQ_RECV_IM_REJECT_JOIN_CLUSTER:
    			log.debug("对方拒绝我加入群,附加消息为:" + packet.message);
    			e = new QQEvent(packet);
    			e.type = QQEvent.QQ_REQUEST_JOIN_CLUSTER_REJECTED;
    			break;
        	case QQ.QQ_RECV_IM_REQUEST_JOIN_CLUSTER:
    			log.debug("对方请求加入我的群,附加消息为:" + packet.message);
    			e = new QQEvent(packet);
    			e.type = QQEvent.QQ_REQUEST_JOIN_CLUSTER;
    			break;
        	case QQ.QQ_RECV_IM_CLUSTER_NOTIFICATION:
        		switch(packet.opCode) {
        			case QQ.QQ_CLUSTER_OP_SET_ADMIN:
        				e = new QQEvent(packet);
        				e.type = QQEvent.QQ_ADMIN_ENTITLED;
        				break;
        			case QQ.QQ_CLUSTER_OP_UNSET_ADMIN:
        				e = new QQEvent(packet);
        				e.type = QQEvent.QQ_ADMIN_WITHDRAWED;
        				break;
        		}
        		break;
        	case QQ.QQ_RECV_IM_SIGNATURE_CHANGE:
        		log.debug("好友" + packet.signatureOwner + "的个性签名改变了");
        		e = new QQEvent(packet);
        		e.type = QQEvent.QQ_FRIEND_SIGNATURE_CHANGED;
        		break;
        	case QQ.QQ_RECV_IM_QQLIVE:
        		switch(packet.qqlive.type) {
        			case QQ.QQ_LIVE_IM_TYPE_DISK:
        				log.debug("收到网络硬盘通知");
        				e = new QQEvent(packet);
        				e.type = QQEvent.QQ_RECEIVE_DISK_NOTIFICATION;
        				break;
        			default:
        				log.debug("收到未知QQ直播消息");
	        			e = new QQEvent(packet);
	        			e.type = QQEvent.QQ_RECEIVE_QQLIVE;
	        			break;
        		}
        		break;
        	case QQ.QQ_RECV_IM_MEMBER_LOGIN_HINT:
        		log.debug("收到会员登录提示");
        		e = new QQEvent(packet);
        		e.type = QQEvent.QQ_RECEIVE_MEMBER_LOGIN_HINT;
        		break;
        	case QQ.QQ_RECV_IM_PROPERTY_CHANGE:
        		log.debug("收到好友属性变化通知");
        		e = new QQEvent(packet);
        		e.type = QQEvent.QQ_FRIEND_PROPERTY_CHANGED;
        		break;
        	case QQ.QQ_RECV_IM_CUSTOM_HEAD_CHANGE:
        		log.debug("收到好友自定义头像改变通知");
        		e = new QQEvent(packet);
        		e.type = QQEvent.QQ_FRIEND_CUSTOM_HEAD_CHANGED;
        		break;
    		default:
                log.debug("接收到一条未知类型消息: " + ((int)packet.header.type) + ",目前无法处理,忽略");
    			break;
        }
        
        // fire event
        if(e != null)
        	client.fireQQEvent(e);
    }

    /**
     * 处理Keep Alive的回复事件
     * 
     * @param in
     */
    private void processKeepAliveReply(BasicInPacket in) {
        QQEvent e;
        KeepAliveReplyPacket packet = (KeepAliveReplyPacket)in;
        if(log.isDebugEnabled()) {
            log.debug("Keep Alive: 在线数: " + packet.onlines + "我的IP: " + packet.ip);
        }
        
        // 触发事件
        e = new QQEvent(packet);
        e.type = QQEvent.QQ_KEEP_ALIVE_SUCCESS;
        client.fireQQEvent(e);
    }

    /**
     * 处理发送消息回复事件
     * 
     * @param in
     */
    private void processSendIMReply(BasicInPacket in) {
        QQEvent e;
        SendIMReplyPacket packet = (SendIMReplyPacket)in;
        if(packet.replyCode == QQ.QQ_REPLY_OK) {
        	SendIMPacket srcPacket = (SendIMPacket)policy.retrieveSent(packet);
        	char messageType = srcPacket.getMessageType();
        	if(messageType == QQ.QQ_IM_TYPE_TEXT) {
	            log.debug("消息发送成功");
	            e = new QQEvent(srcPacket);
	            e.type = QQEvent.QQ_SEND_IM_SUCCESS;
	            client.fireQQEvent(e);        		
        	} else if(messageType == QQ.QQ_IM_TYPE_UDP_REQUEST) {
        		log.debug("传送文件请求已发送,等待对方接受");
        		e = new QQEvent(srcPacket);
        		e.type = QQEvent.QQ_SEND_FILE_REQUEST_SEND_SUCCESS;
        		client.fireQQEvent(e);
        	} else if(messageType == QQ.QQ_IM_TYPE_NOTIFY_IP) {
        	    log.debug("IP信息已发送,等待对方返回确认");
        	}
        }
    }

    /**
     * 处理得到在线好友回复事件
     * 
     * @param in
     */
    private void processGetFriendOnlineReply(BasicInPacket in) {
        QQEvent e;
        GetOnlineOpReplyPacket packet = (GetOnlineOpReplyPacket)in;
        
        /*if(log.isDebugEnabled()) {
            Iterator iter = packet.onlineFriends.iterator();
            while(iter.hasNext()) {
                FriendStatus fs = ((FriendOnlineEntry)iter.next()).status;
                log.debug("好友" + fs.qqNum + "在线状态" + Utils.getStatusString(fs.status));
            }
        }*/
        
        e = new QQEvent(packet);
        e.type = QQEvent.QQ_GET_FRIEND_ONLINE_SUCCESS;
        client.fireQQEvent(e);            
    }

    /**
     * 处理得到好友列表回复事件
     * 
     * @param in
     */
    private void processGetFriendListReply(BasicInPacket in) {
        QQEvent e;
        GetFriendListReplyPacket packet = (GetFriendListReplyPacket)in;
        /*if(log.isDebugEnabled()) {
            Iterator iter = packet.friends.iterator();
  

⌨️ 快捷键说明

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