package com.yfd.platform.component.nettyserver;

import lombok.extern.slf4j.Slf4j;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.charset.StandardCharsets;

@Slf4j
public class MessageParser {
    public static void main(String[] args) {
        // 给定的报文数据
        String hexData = "3c 7c 3f 4d 56 b4 00 0b ab e0 05 e9 08 00 45 00 01 62 64 9c 40 00 80 06 10 ea c0 a8 01 ab c0 a8 01 14 df f6 27 1b de 43 d4 b9 a8 fa 38 4c 50 18 10 00 58 c2 00 00 eb 90 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 21 01 00 00 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20 65 6e 63 6f 64 69 6e 67 3d 22 55 54 46 2d 38 22 20 3f 3e 0d 0a 3c 50 61 74 72 6f 6c 44 65 76 69 63 65 3e 0d 0a 20 20 20 20 3c 53 65 6e 64 43 6f 64 65 3e 33 34 30 32 30 30 30 30 30 31 31 37 30 30 30 30 30 30 30 31 3c 2f 53 65 6e 64 43 6f 64 65 3e 0d 0a 20 20 20 20 3c 52 65 63 65 69 76 65 43 6f 64 65 3e 33 34 30 32 30 30 30 30 30 30 32 30 30 30 30 30 30 30 30 31 3c 2f 52 65 63 65 69 76 65 43 6f 64 65 3e 0d 0a 20 20 20 20 3c 54 79 70 65 3e 32 35 31 3c 2f 54 79 70 65 3e 0d 0a 20 20 20 20 3c 43 6f 6d 6d 61 6e 64 3e 31 3c 2f 43 6f 6d 6d 61 6e 64 3e 0d 0a 20 20 20 20 3c 43 6f 64 65 20 2f 3e 0d 0a 20 20 20 20 3c 54 69 6d 65 3e 32 30 32 33 2d 31 30 2d 31 31 20 31 38 3a 35 36 3a 35 32 3c 2f 54 69 6d 65 3e 0d 0a 20 20 20 20 3c 49 74 65 6d 73 20 2f 3e 0d 0a 3c 2f 50 61 74 72 6f 6c 44 65 76 69 63 65 3e 0d 0a eb 90";

        // 将十六进制字符串转换为字节数组
        String[] hexValues = hexData.split(" ");
        byte[] byteArray = new byte[hexValues.length];
        for (int i = 0; i < hexValues.length; i++) {
            byteArray[i] = (byte) Integer.parseInt(hexValues[i], 16);
        }

        // 创建ByteBuffer，并设置字节序为小头字节序
        ByteBuffer buffer = ByteBuffer.wrap(byteArray);
        buffer.order(ByteOrder.LITTLE_ENDIAN);
        // 跳过前 54 个字节
        buffer.position(54);

        // 读取起始标志符
        int startFlag = buffer.getShort() & 0xFFFF;

        // 读取发送会话序列号
        long sendSessionID = buffer.getLong();

        // 读取接收会话序列号
        long receiveSessionID = buffer.getLong();

        // 读取会话源标识
        byte sessionSource = buffer.get();

        // 读取XML的字节长度
        int xmlLength = buffer.getInt();

        // 读取交互内容（XML）
        byte[] xmlData = new byte[xmlLength];
        buffer.get(xmlData);
        String xmlContent = new String(xmlData, StandardCharsets.UTF_8);

        // 读取结束标志符
        int endFlag = buffer.getShort() & 0xFFFF;

        // 打印解析结果
        log.info("起始标志符: " + Integer.toHexString(startFlag));
        log.info("发送会话序列号: " + sendSessionID);
        log.info("接收会话序列号: " + receiveSessionID);
        log.info("会话源标识: 0x" + String.format("%02X", sessionSource));
        log.info("XML的字节长度: " + xmlLength);
        log.info("交互内容 (XML):");
        log.info(xmlContent);
        log.info("结束标志符: " + Integer.toHexString(endFlag));
    }
}
