#ifndef __TP_PROTOCOL_H__ #define __TP_PROTOCOL_H__ #include #include #include #include #include #include #include #include #include #include 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 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 encode(TP_PROTOCOL_MESSAGE& msg); }; class TpProtocolDeCode { public: void init(); void clear(); bool parser(QByteArray inData); bool empty(); QSharedPointer 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 > mMsgQ; QByteArray mCurReserved; TpProtoParserStatus mCurParserStatus; }; #endif //__TP_PROTOCOL_H__