| 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); | 
|     } | 
| } |