hlp:荆州版本
This commit is contained in:
+78
-78
@@ -1,78 +1,78 @@
|
||||
#ifndef MESSAGE_H
|
||||
#define MESSAGE_H
|
||||
|
||||
// 协议类:用于接收外部 网络通信 发送的打印内容
|
||||
|
||||
#include <QObject>
|
||||
#include <QByteArray>
|
||||
|
||||
/*
|
||||
| 起始标识(1B) | 预留字段(1B) | 内容长度(2B) | 数据内容(NB) | 结束标识(1B) |
|
||||
| 0x2B | 自定义 | N() | 实际数据 | 0x3C |
|
||||
2B 00 02 00 08 08 3C
|
||||
*/
|
||||
// 内存对齐
|
||||
#pragma pack(push, 1)
|
||||
struct MsgHead {
|
||||
char start;
|
||||
char reserved;
|
||||
unsigned short length;
|
||||
|
||||
MsgHead() {
|
||||
start = 0x2B;
|
||||
reserved = 0;
|
||||
length = 0;
|
||||
}
|
||||
|
||||
bool isValid() {
|
||||
return start == 0x2B;
|
||||
}
|
||||
};
|
||||
|
||||
struct MsgTail {
|
||||
quint8 end;
|
||||
|
||||
MsgTail() {
|
||||
end = 0x3C;
|
||||
}
|
||||
|
||||
bool isValid() {
|
||||
return end == 0x3C;
|
||||
}
|
||||
};
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
class Message : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Message(QObject *parent = 0);
|
||||
~Message();
|
||||
|
||||
// 打包:数据 + 预留字段 -> 完整帧
|
||||
QByteArray pack(const QByteArray &data);
|
||||
|
||||
// 解包:完整帧 -> 数据和预留字段
|
||||
bool unpack(const QByteArray &frame, QByteArray &data);
|
||||
|
||||
// 验证帧格式
|
||||
bool validate(const QByteArray &frame);
|
||||
|
||||
QByteArray extractFrame(const QByteArray &buffer, int &consumedBytes);
|
||||
|
||||
private:
|
||||
// 协议常量
|
||||
char FRAME_START ; // '+' 0x2b
|
||||
char FRAME_END; // '<' 0x3c
|
||||
int HEADER_SIZE ; // 1(起始) + 2(长度) + 1(预留)
|
||||
int TRAILER_SIZE; // 1(结束)
|
||||
int MIN_FRAME_SIZE; // 5字节
|
||||
|
||||
quint16 readLength(const QByteArray &frame);
|
||||
|
||||
bool checkFrameBoundary(const QByteArray &frame);
|
||||
};
|
||||
|
||||
#endif // MESSAGE_H
|
||||
#ifndef MESSAGE_H
|
||||
#define MESSAGE_H
|
||||
|
||||
// 协议类:用于接收外部 网络通信 发送的打印内容
|
||||
|
||||
#include <QObject>
|
||||
#include <QByteArray>
|
||||
|
||||
/*
|
||||
| 起始标识(1B) | 预留字段(1B) | 内容长度(2B) | 数据内容(NB) | 结束标识(1B) |
|
||||
| 0x2B | 自定义 | N() | 实际数据 | 0x3C |
|
||||
2B 00 02 00 08 08 3C
|
||||
*/
|
||||
// 内存对齐
|
||||
#pragma pack(push, 1)
|
||||
struct MsgHead {
|
||||
char start;
|
||||
char reserved;
|
||||
unsigned short length;
|
||||
|
||||
MsgHead() {
|
||||
start = 0x2B;
|
||||
reserved = 0;
|
||||
length = 0;
|
||||
}
|
||||
|
||||
bool isValid() {
|
||||
return start == 0x2B;
|
||||
}
|
||||
};
|
||||
|
||||
struct MsgTail {
|
||||
quint8 end;
|
||||
|
||||
MsgTail() {
|
||||
end = 0x3C;
|
||||
}
|
||||
|
||||
bool isValid() {
|
||||
return end == 0x3C;
|
||||
}
|
||||
};
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
class Message : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Message(QObject *parent = 0);
|
||||
~Message();
|
||||
|
||||
// 打包:数据 + 预留字段 -> 完整帧
|
||||
QByteArray pack(const QByteArray &data);
|
||||
|
||||
// 解包:完整帧 -> 数据和预留字段
|
||||
bool unpack(const QByteArray &frame, QByteArray &data);
|
||||
|
||||
// 验证帧格式
|
||||
bool validate(const QByteArray &frame);
|
||||
|
||||
QByteArray extractFrame(const QByteArray &buffer, int &consumedBytes);
|
||||
|
||||
private:
|
||||
// 协议常量
|
||||
char FRAME_START ; // '+' 0x2b
|
||||
char FRAME_END; // '<' 0x3c
|
||||
int HEADER_SIZE ; // 1(起始) + 2(长度) + 1(预留)
|
||||
int TRAILER_SIZE; // 1(结束)
|
||||
int MIN_FRAME_SIZE; // 5字节
|
||||
|
||||
quint16 readLength(const QByteArray &frame);
|
||||
|
||||
bool checkFrameBoundary(const QByteArray &frame);
|
||||
};
|
||||
|
||||
#endif // MESSAGE_H
|
||||
|
||||
Reference in New Issue
Block a user