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

📄 basicparser.java

📁 MilyQQ是一个使用控制台的QQ客户端,基于LumaQQ的核心JQL包开发,只有一个可执行的jar包(MilyQQ.jar),携带方便,由于是Java程序,因此理论上应该可以运行于所有平台,不过基于
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	/* (non-Javadoc)
	 * @see edu.tsinghua.lumaqq.qq.packets.IParser#isIncoming(java.nio.ByteBuffer)
	 */
	public boolean isIncoming(ByteBuffer buf) {
	    char source = udp ? buf.getChar(offset + 1) : buf.getChar(offset + 3);
	    return source != QQ.QQ_CLIENT;
	}

	/* (non-Javadoc)
	 * @see edu.tsinghua.lumaqq.qq.packets.IParser#isUdp(java.nio.ByteBuffer)
	 */
	public boolean isUdp(ByteBuffer buf) {
		return udp;
 	}

	/* (non-Javadoc)
	 * @see edu.tsinghua.lumaqq.qq.packets.IParser#parseIncoming(java.nio.ByteBuffer, int, edu.tsinghua.lumaqq.qq.beans.QQUser)
	 */
	public InPacket parseIncoming(ByteBuffer buf, int len, QQUser user) throws PacketParseException {
	    try {
            switch(command) {
                case QQ.QQ_CMD_REQUEST_LOGIN_TOKEN:
                    return new RequestLoginTokenReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_KEEP_ALIVE:
            	    return new KeepAliveReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_MODIFY_INFO:
            	    return new ModifyInfoReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_ADD_FRIEND_EX:
            		return new AddFriendExReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_SEARCH_USER:
            	    return new SearchUserReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_DELETE_FRIEND:
            	    return new DeleteFriendReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_REMOVE_SELF:
            	    return new RemoveSelfReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_ADD_FRIEND_AUTH:
            	    return new AddFriendAuthReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_GET_USER_INFO:
            		return new GetUserInfoReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_CHANGE_STATUS:
            		return new ChangeStatusReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_SEND_IM:
            		return new SendIMReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_RECV_IM:
            	    return new ReceiveIMPacket(buf, len, user);
            	case QQ.QQ_CMD_LOGIN:
            		return new LoginReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_GET_FRIEND_LIST:
            		return new GetFriendListReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_GET_ONLINE_OP:
            		return new GetOnlineOpReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_RECV_MSG_SYS:
            	    return new SystemNotificationPacket(buf, len, user);
            	case QQ.QQ_CMD_RECV_MSG_FRIEND_CHANGE_STATUS:
            		return new FriendChangeStatusPacket(buf, len, user);
            	case QQ.QQ_CMD_UPLOAD_GROUP_FRIEND:
            		return new UploadGroupFriendReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_DOWNLOAD_GROUP_FRIEND:
            		return new DownloadGroupFriendReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_GROUP_DATA_OP:
            		return new GroupDataOpReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_FRIEND_DATA_OP:
            		return new FriendDataOpReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_CLUSTER_CMD:
            		return new ClusterCommandReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_REQUEST_KEY:
            		return new RequestKeyReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_ADVANCED_SEARCH:
            	    return new AdvancedSearchUserReplyPacket(buf, len, user);
//            	case QQ.QQ_CMD_CLUSTER_DATA_OP:
//            	    return new GetTempClusterOnlineMemberReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_AUTHORIZE:
            		return new AuthorizeReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_SIGNATURE_OP:
            		return new SignatureOpReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_WEATHER_OP:
            		return new WeatherOpReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_USER_PROPERTY_OP:
            		return new UserPropertyOpReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_FRIEND_LEVEL_OP:
            		return new FriendLevelOpReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_SEND_SMS:
            		return new SendSMSReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_TEMP_SESSION_OP:
            		return new TempSessionOpReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_PRIVACY_DATA_OP:
            		return new PrivacyDataOpReplyPacket(buf, len, user);
            	default:
            		return new UnknownInPacket(buf, len, user);
            }
        } catch (PacketParseException e) {
            // 如果解析失败,返回null
            buf.position(offset);
            return new UnknownInPacket(buf, len, user);
        }
	}

	/* (non-Javadoc)
	 * @see edu.tsinghua.lumaqq.qq.packets.IParser#parseOutcoming(java.nio.ByteBuffer, int, edu.tsinghua.lumaqq.qq.beans.QQUser)
	 */
	public OutPacket parseOutcoming(ByteBuffer buf, int len, QQUser user) throws PacketParseException {
	    try {
            switch(command) {
                case QQ.QQ_CMD_REQUEST_LOGIN_TOKEN:
                    return new RequestLoginTokenPacket(buf, len, user);
            	case QQ.QQ_CMD_KEEP_ALIVE:
            	    return new KeepAlivePacket(buf, len, user);
            	case QQ.QQ_CMD_MODIFY_INFO:
            	    return new ModifyInfoPacket(buf, len, user);
            	case QQ.QQ_CMD_SEARCH_USER:
            	    return new SearchUserPacket(buf, len, user);
            	case QQ.QQ_CMD_ADD_FRIEND_EX:
            		return new AddFriendExPacket(buf, len, user);
            	case QQ.QQ_CMD_DELETE_FRIEND:
            	    return new DeleteFriendPacket(buf, len, user);
            	case QQ.QQ_CMD_REMOVE_SELF:
            	    return new RemoveSelfPacket(buf, len, user);
            	case QQ.QQ_CMD_ADD_FRIEND_AUTH:
            	    return new AddFriendAuthPacket(buf, len, user);
            	case QQ.QQ_CMD_GET_USER_INFO:
            		return new GetUserInfoPacket(buf, len, user);
            	case QQ.QQ_CMD_CHANGE_STATUS:
            		return new ChangeStatusPacket(buf, len, user);
            	case QQ.QQ_CMD_SEND_IM:
            		return new SendIMPacket(buf, len, user);
            	case QQ.QQ_CMD_RECV_IM:
            	    return new ReceiveIMReplyPacket(buf, len, user);
            	case QQ.QQ_CMD_LOGIN:
            		return new LoginPacket(buf, len, user);
            	case QQ.QQ_CMD_GET_FRIEND_LIST:
            		return new GetFriendListPacket(buf, len, user);
            	case QQ.QQ_CMD_GET_ONLINE_OP:
            		return new GetOnlineOpPacket(buf, len, user);
            	case QQ.QQ_CMD_UPLOAD_GROUP_FRIEND:
            		return new UploadGroupFriendPacket(buf, len, user);
            	case QQ.QQ_CMD_DOWNLOAD_GROUP_FRIEND:
            		return new DownloadGroupFriendPacket(buf, len, user);
            	case QQ.QQ_CMD_GROUP_DATA_OP:
            		return new GroupDataOpPacket(buf, len, user);
            	case QQ.QQ_CMD_FRIEND_DATA_OP:
            		return new FriendDataOpPacket(buf, len, user);
            	case QQ.QQ_CMD_ADVANCED_SEARCH:
            	    return new AdvancedSearchUserPacket(buf, len, user);
            	case QQ.QQ_CMD_CLUSTER_CMD:
            	    return new ClusterCommandPacket(buf, len, user);
            	case QQ.QQ_CMD_REQUEST_KEY:
            		return new RequestKeyPacket(buf, len, user);
            	case QQ.QQ_CMD_LOGOUT:
            	    return new LogoutPacket(buf, len, user);
            	case QQ.QQ_CMD_AUTHORIZE:
            		return new AuthorizePacket(buf, len, user);
            	case QQ.QQ_CMD_SIGNATURE_OP:
            		return new SignatureOpPacket(buf, len, user);
            	case QQ.QQ_CMD_WEATHER_OP:
            		return new WeatherOpPacket(buf, len, user);
            	case QQ.QQ_CMD_USER_PROPERTY_OP:
            		return new UserPropertyOpPacket(buf, len, user);
            	case QQ.QQ_CMD_FRIEND_LEVEL_OP:
            		return new FriendLevelOpPacket(buf, len, user);
            	case QQ.QQ_CMD_SEND_SMS:
            		return new SendSMSPacket(buf, len, user);
            	case QQ.QQ_CMD_TEMP_SESSION_OP:
            		return new TempSessionOpPacket(buf, len, user);
            	case QQ.QQ_CMD_PRIVACY_DATA_OP:
            		return new PrivacyDataOpPacket(buf, len, user);
            	default:
            		return new UnknownOutPacket(buf, len, user);
            }
        } catch (PacketParseException e) {
            // 如果解析失败,返回一个未知包
            buf.position(offset);
            return new UnknownOutPacket(buf, len, user);
        }
	}

	/* (non-Javadoc)
	 * @see edu.tsinghua.lumaqq.qq.packets.IParser#isDuplicated(java.nio.ByteBuffer)
	 */
	public boolean isDuplicated(ByteBuffer buf) {
	    boolean duplicated = history.check(getHash(buf), true);
//	    if(duplicated)
//	        log.debug("包" + Util.getCommandString(command) + " 序号 " + (int)sequence + "重复到达,忽略");
	    return duplicated;
	}

    /* (non-Javadoc)
     * @see edu.tsinghua.lumaqq.qq.packets.IParser#isDuplicatedNeedReply()
     */
    public boolean isDuplicatedNeedReply() {
        return command == QQ.QQ_CMD_RECV_IM;
    }

	/* (non-Javadoc)
	 * @see edu.tsinghua.lumaqq.qq.packets.IParser#relocate(java.nio.ByteBuffer)
	 */
	public int relocate(ByteBuffer buf) {
		int offset = buf.position();
		if(buf.remaining() < 2)
			return offset;
		int len = buf.getChar(offset);
		if(len <= 0 || offset + len > buf.limit())
			return offset;
		else
			return offset + len;
	}
}

⌨️ 快捷键说明

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