#
whycq
2024-08-15 e54492fb532366faac8aa5d46ad8905ea3ff38d5
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package com.example.agvcontroller.protocol;
 
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
 
import java.util.Objects;
 
/**
 * AGV报文模型
 * Created by vincent on 2023/3/10
 */
public class AgvPackage {
 
    /**
     * 源数据包缓冲区(引用)
     */
    private ByteBuf sourceBuff;
 
    /**
     * 原始消息对应的16进制字符串
     */
    private String sourceHexStr;
 
    /**
     * 消息头部
     */
    private PacHeader header;
 
    /**
     * 消息体
     */
    private PacBody body;
 
    /**
     * 消息的校正码
     */
    private int validCode;
 
    /**
     * 是否为校验异常包
     */
    private boolean errorPac;
 
    /**
     * 校验异常类型
     */
    private PacErrorType pacErrorType;
 
    public static AgvPackage valueOfEmpty() {
        AgvPackage agvPackage = new AgvPackage();
        agvPackage.setHeader(new PacHeader())
                .setBody(new PacBody())
                .setValidCode((short) 0)
                .setErrorPac(false);
        return agvPackage;
    }
 
    //public String toLogString() {
    //    StringBuilder pacSb = new StringBuilder();
    //    pacSb.append("AGV(").append(getHeader().getUniqueNo()).append(")")
    //        .append("上传")
    //        .append("[").append(getHeader().getProtocolType().getDes()).append("]消息.")
    //        .append("原始消息[").append(getSourceHexStr()).append("]");
    //    return pacSb.toString();
    //}
 
    public ByteBuf getSourceBuff() {
        // 因为处理buffer时,总是希望拿到一个重置了readerIndex的buf
        if (Objects.nonNull(this.sourceBuff)) {
            this.sourceBuff.resetReaderIndex();
        }
        return this.sourceBuff;
    }
 
    public AgvPackage setSourceBuff(ByteBuf sourceBuff) {
        this.sourceBuff = sourceBuff;
        if (Cools.isEmpty(this.sourceHexStr)) {
            this.sourceBuff.resetReaderIndex();
            this.sourceHexStr = ByteBufUtil.hexDump(this.sourceBuff).toUpperCase();
            this.sourceBuff.resetReaderIndex();
        }
        return this;
    }
 
    public PacHeader getHeader() {
        return header;
    }
 
    public AgvPackage setHeader(PacHeader header) {
        this.header = header;
        return this;
    }
 
    public PacBody getBody() {
        return body;
    }
 
    public AgvPackage setBody(PacBody body) {
        this.body = body;
        return this;
    }
 
    public int getValidCode() {
        return validCode;
    }
 
    public AgvPackage setValidCode(int validCode) {
        this.validCode = validCode;
        return this;
    }
 
    public boolean isErrorPac() {
        return errorPac;
    }
 
    public AgvPackage setErrorPac(boolean errorPac) {
        this.errorPac = errorPac;
        return this;
    }
 
    public String getSourceHexStr() {
        return sourceHexStr;
    }
 
    public AgvPackage setSourceHexStr(String sourceHexStr) {
        this.sourceHexStr = sourceHexStr;
        return this;
    }
 
    public PacErrorType getPacErrorType() {
        return pacErrorType;
    }
 
    public AgvPackage setPacErrorType(PacErrorType pacErrorType) {
        this.pacErrorType = pacErrorType;
        return this;
    }
 
//    public ByteBuf convert(ByteBuf byteBuf){
//        byteBuf.writeByte(this.getHeader().getStartSymbol())
//                .writeShort(this.getHeader().getContentLength())
//                .writeByte(this.getHeader().getProtocolType().getCode())
//                .writeBytes(this.getHeader().getUniqueNo().getBytes(AgvConstant.CHARSET_GBK))
//                .writeByte(this.getHeader().getEncryptType().getCode())
//                .writeBytes(this.getBody().getContent())
//                .writeByte(this.getValidCode());
//        // 计算并设置校验码
////        this.setValidCode(ValidUtil.caculateValidByteFromBuff(byteBuf));
//        byteBuf.resetReaderIndex();
//        byteBuf.writerIndex(byteBuf.readableBytes() - 1).writeByte(this.getValidCode());
//        return byteBuf;
//    }
 
}