You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
1.9 KiB
C++
95 lines
1.9 KiB
C++
#ifndef __TP_PROTOCOL_H__
|
|
#define __TP_PROTOCOL_H__
|
|
|
|
#include <QtCore/QJsonDocument>
|
|
#include <QtCore/QJsonObject>
|
|
#include <QtCore/qjsonarray.h>
|
|
#include <QtCore/QTextStream>
|
|
#include <QQueue>
|
|
#include <QByteArray>
|
|
#include <QMap>
|
|
#include <QDateTime>
|
|
#include <QTcpSocket>
|
|
#include <QSharedPointer>
|
|
|
|
const quint8 TP_PROTO_VERSION = 77;
|
|
const quint8 TP_PROTO_MAGIC = 88;
|
|
const quint16 TP_PROTO_SERVER = 9999;
|
|
|
|
const quint32 TP_PROTO_MAX_SIZE = 100 * 1024 * 1024; //100M
|
|
const quint32 TP_PROTO_HEAD_SIZE = 8;
|
|
|
|
typedef enum TpServerStatus
|
|
{
|
|
ON_RUNNING = 0,
|
|
ON_SHUTDOWN = 1,
|
|
}TpServerStatus;
|
|
|
|
typedef struct tagTP_CLIENT_STATUS
|
|
{
|
|
QString strClientName;
|
|
QString strClientIP;
|
|
QString strHostIP;
|
|
QAbstractSocket::SocketState status;
|
|
int nSessID;
|
|
QDateTime tLastActive;
|
|
}TP_CLIENT_STATUS;
|
|
typedef QMap<QString, TP_CLIENT_STATUS> ClientsStatusMap;
|
|
|
|
|
|
typedef enum TpProtoParserStatus
|
|
{
|
|
ON_PARSER_INIT = 0,
|
|
ON_PARSER_HAED = 1,
|
|
ON_PARSER_BODY = 2,
|
|
}TpProtoParserStatus;
|
|
|
|
|
|
typedef struct tagTP_PROTOCOL_HEAD
|
|
{
|
|
quint8 version;
|
|
quint8 magic;
|
|
quint16 server;
|
|
quint32 len;
|
|
}TP_PROTOCOL_HEAD;
|
|
|
|
class TP_PROTOCOL_MESSAGE
|
|
{
|
|
public:
|
|
TP_PROTOCOL_MESSAGE(){}
|
|
~TP_PROTOCOL_MESSAGE(){}
|
|
|
|
public:
|
|
TP_PROTOCOL_HEAD head;
|
|
QJsonObject body;
|
|
};
|
|
|
|
class TpProtocolEnCode
|
|
{
|
|
public:
|
|
TpProtocolEnCode();
|
|
~TpProtocolEnCode();
|
|
static QSharedPointer<QByteArray> encode(TP_PROTOCOL_MESSAGE& msg);
|
|
};
|
|
|
|
class TpProtocolDeCode
|
|
{
|
|
public:
|
|
void init();
|
|
void clear();
|
|
bool parser(QByteArray inData);
|
|
bool empty();
|
|
QSharedPointer<TP_PROTOCOL_MESSAGE> front();
|
|
void pop();
|
|
private:
|
|
bool parserHead(QByteArray& curData, quint32& curLen, quint32& parserLen, bool & parserBreak);
|
|
bool parserBody(QByteArray& curData, quint32& curLen, quint32& parserLen, bool & parserBreak);
|
|
|
|
private:
|
|
TP_PROTOCOL_MESSAGE mCurMsg;
|
|
QQueue<QSharedPointer<TP_PROTOCOL_MESSAGE> > mMsgQ;
|
|
QByteArray mCurReserved;
|
|
TpProtoParserStatus mCurParserStatus;
|
|
};
|
|
|
|
#endif //__TP_PROTOCOL_H__
|