/************************************************************* /* Copyright (C), 2014-2020, lyfz. Co., Ltd. /* 文件名: Client2SrvType.h /* 作者: Jeff.w /* 创建日期: 2014-08-07 /* 版本号: V1.0 /* 描述: 核心层底,客户端与服务端通信协议包定义 /* 其它: /* 主要类模块: /* 历史修改记录: /* 作者 时间 版本 描述 /* Jeff.w 14/08/07 1.0 创建这个模块 ***************************************************************/ #ifndef CLIENT2SRVTYPE_HEADER #define CLIENT2SRVTYPE_HEADER #pragma once //#include "Stdafx.h" //#include "..\common\Global.h" extern unsigned int VerifyIntegrityPacket(IN void *pIntegrityPacket,IN unsigned int nPacketSize); #include "Const.h" // 完整的数据包:协议头 + 协议体(数据)+ 协议尾; // 注意:尽量使数据包小,使数量吞吐量更大、运行速度更快; // 公共命令类类型;:common comand type // 主命令类型1: C2L:consumer terminal to lyfz service; // 主命令类型2: C2C:consumer client to consumer service; enum { //----------------------------:common comand.type: 1~999---------------------------------------------------- CMD_HEART = 1, // 心跳包; CMD_TOCHAT = 2, // 文字聊天; CMD_FILEINFO_TRANSFER = 3, // 文件传输-文件信息; CMD_FILECONT_TRANSFER = 4, // 文件传输-文件内容; CMD_UPDATA = 5, // 有升级信息(用户终端每次登录时,请求检测是否有新版本可升级的信息); CMD_DATABASEINFO = 6, // 向请求端返回数据库信息; CMD_OHTER_INFO = 999, // 其他信息; //------------------------C2L:consumer terminal to lyfz.service: 1000~1999------------------------------------ C2LCMD_REQ_LOGIN = 1000, // 用户终端请求登录利亚方舟服务端(外网ip+登录信息); //C2LCMD_GET_DOG_DATA = 1001, // 利亚方舟获取用户终端机器加密狗数据信息; C2LCMD_DOGINFO = 1001, // 用户终端向利亚方舟发送加密狗信息; C2LCMD_GET_VAR = 1002, // 请求用户终端的版本号; C2LCMD_DEAL_ILLEGAL = 1003, // 处理盗版、过期用户:停止用户终端工作、启用定时关机、程序文件自动删除等等操作命令; C2LCMD_DEAL_SMS = 1004, // 利亚方舟服务端处理用户终端的短信发送工作; C2LCMD_GET_DBINFO = 1005, // 利亚方舟服务端获取用户终端电脑数据库信息; // .预留,若SQL数据库引擎未启用TCP/IP作为远程连接方式,需定义读写表的具体命令;(Jeff.100%的不建议使用这种方式获取数据,占用太多带宽和资源) // .若要使用SQL,则只允许SQL的updata、insert、delete、drop……等命令,不允许使用select来返回查询到数据; C2LCMD_OTHER_INFO = 1999, // 读其它信息; //------------------------C2C:consumer client to consumer service: 2000~2999-------------------------------- C2CCMD_REQ_LOGIN = 2000, // 客户端请求登录服务器; C2CCMD_REQ_LOGOUT = 2001, // 客户端注销; C2CCMD_REQ_DOG_DATA = 2002, // 读软件狗数据; C2CCMD_AUTO_UPDATA = 2003, // 服务端向所有客户发送自动数据更新命令; C2CCMD_REQ_SERVER_VAR = 2004, // 请求服务端的版本号; C2CCMD_GET_DBINFO = 2005, // 利亚方舟服务端获取用户终端电脑数据库信息; C2CCMD_ORD_PHOTO_BAK = 2006, // 客户端端向备份程序发送订单相片重新备份命令(导片与备份存在写备份无法锁定现象,need to Notify); // .预留,若SQL数据库引擎未启用TCP/IP作为远程连接方式,需定义读写表的具体命令;(Jeff.100%的不建议使用这种方式获取数据,占用太多带宽和资源) // .若要使用SQL,则只允许SQL的updata、insert、delete、drop……等命令,不允许使用select来返回查询到数据; C2CCMD_OTHER_INFO = 2999, // 读其它信息; }; // 请在此处更改需要设置的包头和包尾标识符; const int PBOF = 0x7e; const int PEOF = 0x0e; // 协议头-勿更改; typedef struct __STPROTOCOLHEADER__ { unsigned char bof; // 协议头标识; unsigned int nCmd; // 具体的命令; unsigned int nCmdType; // 命令类型; unsigned int nDataLen; // 有效数据长度,包含头; unsigned int nVerify; // 预留校验码; __STPROTOCOLHEADER__(){bof = PBOF;} }STProtocolheader,*pSTProtocolheader; // 协议尾-勿更改; typedef struct __STPROTOCOLTAIL__ { unsigned char eof; // 协议尾标识; __STPROTOCOLTAIL__(){eof = PEOF;} }STProtocoltail,*pSTProtocoltail; // ---------------------------------------------------------------------------------------------- // -------------------------------------以下为全为协议体-----------------------------------------; typedef struct __STHEARTBEATBODY__ { STProtocolheader tPHeader; TCHAR cflaghbeat; __STHEARTBEATBODY__(){ tPHeader.nCmd = CMD_HEART; tPHeader.nCmdType = 0; cflaghbeat = 9; tPHeader.nDataLen = sizeof(__STHEARTBEATBODY__); } inline void GetVerify() { tPHeader.nVerify = VerifyIntegrityPacket(this,tPHeader.nDataLen); } }STHeartbeatbody,*pSTHeartbeatbody; // 示例,文件信息: typedef struct __STFILEINFOBODY__ { STProtocolheader tPHeader; // 需要添加的实际数据; unsigned __int64 nFileLength; // 文件长度; TCHAR szFileName[MAX_PATH]; // 长文件名; TCHAR szFileExt[MAX_PATH]; // 文件扩展名; //DATE fCreateDate; // 文件创建日期; //DATE fModifyDate; // 文件创建日期; __int64 tCreateDate; // 文件创建日期; __int64 tModifyDate; // 文件创建日期; //unsigned char attribute; // 文件属性; //STProtocoltail tPTail; __STFILEINFOBODY__() { tPHeader.nCmd = CMD_FILEINFO_TRANSFER; tPHeader.nCmdType = 0; tPHeader.nDataLen = sizeof(__STFILEINFOBODY__); } inline void GetVerify() { tPHeader.nVerify = VerifyIntegrityPacket(this,tPHeader.nDataLen); } }STFileInfobody,*pSTFileInfobody; // 文件内容; typedef struct __STFILECONTEXTBODY__ { STProtocolheader tPHeader; int nFileContextLen; unsigned char szFileContext[MAX_FILETRANSFERLENGTH]; //STProtocoltail tPTail; __STFILECONTEXTBODY__() { tPHeader.nCmd = CMD_FILECONT_TRANSFER; tPHeader.nCmdType = 0; tPHeader.nDataLen = sizeof(__STFILECONTEXTBODY__); } inline void GetVerify() { tPHeader.nVerify = VerifyIntegrityPacket(this,tPHeader.nDataLen); } }STFileContextbody,*pSTFileContextbody; // 文字聊天; typedef struct __STCHATBODY__ { STProtocolheader tPHeader; TCHAR szChat[MAX_CHATLENGTH]; //STProtocoltail tPTail; __STCHATBODY__() { tPHeader.nCmd = CMD_TOCHAT; tPHeader.nCmdType = 0; tPHeader.nDataLen = sizeof(__STCHATBODY__); } inline void GetVerify(){ tPHeader.nVerify = VerifyIntegrityPacket(this,tPHeader.nDataLen); } }STChatbody,*pSTChatbody; // 加密狗信息; typedef struct __STDOGINFOBODY__ { STProtocolheader tPHeader; // dog info; // ........ __STDOGINFOBODY__() { tPHeader.nCmd = C2LCMD_DOGINFO; tPHeader.nCmdType = 0; tPHeader.nDataLen = sizeof(__STDOGINFOBODY__); } inline void GetVerify() { tPHeader.nVerify = VerifyIntegrityPacket(this,tPHeader.nDataLen); } }STDogInfobody,*pSTDogInfobody; // 登录账户信息; typedef struct __STACCOUNTINFOBODY__ { STProtocolheader tPHeader; TCHAR szAccount[MAX_PATH]; TCHAR szPassword[MAX_PATH]; __STACCOUNTINFOBODY__() { tPHeader.nCmd = C2CCMD_REQ_LOGIN; tPHeader.nCmdType = 0; tPHeader.nDataLen = sizeof(__STACCOUNTINFOBODY__); } inline void GetVerify() { tPHeader.nVerify = VerifyIntegrityPacket(this,tPHeader.nDataLen); } }STAccountInfobody,*pSTAccountInfobody; // 返回的数据库信息; // 数据库与服务端可不在同一机子; // 备份模块则是单独的一个后台服务程序; typedef struct __STDATABASEINFOBODY__ { STProtocolheader tPHeader; TCHAR szDatabaseServer[MAX_PATH]; // 服务器地址; TCHAR szDatabaseTCPPort[MAX_PATH]; // 服务器TCP端口; TCHAR szDatabaseAccount[MAX_PATH]; // 数据库登录账户; TCHAR szDatabasePassword[MAX_PATH]; // 数据库账户密码; TCHAR szDatabaseName[MAX_PATH]; // 数据库名称; __STDATABASEINFOBODY__(){ tPHeader.nCmd = CMD_DATABASEINFO; tPHeader.nCmdType = 0; tPHeader.nDataLen = sizeof(__STDATABASEINFOBODY__); } inline void GetVerify() { tPHeader.nVerify = VerifyIntegrityPacket(this,tPHeader.nDataLen); } }STDatabaseInfobody,*pSTDatabaseInfobody; #endif