18045010223
2025-07-07 0d3a683a0c97154b1f2e6657398664537e4e3e82
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package org.yzh.protocol.codec;
 
import io.github.yezhihao.netmc.util.ByteBufUtils;
import io.github.yezhihao.protostar.SchemaManager;
import io.github.yezhihao.protostar.schema.RuntimeSchema;
import io.netty.buffer.ByteBuf;
import org.yzh.protocol.basics.JTMessage;
import org.yzh.protocol.jsatl12.DataPacket;
 
/**
 * 数据帧解码器
 * @author yezhihao
 * https://gitee.com/yezhihao/jt808-server
 */
public class DataFrameMessageDecoder extends JTMessageDecoder {
 
    private final RuntimeSchema<DataPacket> dataFrameSchema;
    private final byte[] dataFramePrefix;
 
    public DataFrameMessageDecoder(SchemaManager schemaManager, byte[] dataFramePrefix) {
        super(schemaManager);
        this.dataFramePrefix = dataFramePrefix;
        this.dataFrameSchema = schemaManager.getRuntimeSchema(DataPacket.class, 0);
    }
 
    @Override
    public JTMessage decode(ByteBuf input) {
        if (ByteBufUtils.startsWith(input, dataFramePrefix)) {
            DataPacket message = new DataPacket();
            message.setPayload(input);
            dataFrameSchema.mergeFrom(input, message);
            return message;
        }
        return super.decode(input);
    }
}