#pragma once #include "SocketInterface.h" #include "GeneralHelper.h" #define USER_INFO_MSG (WM_USER + 100) #define MAX_LOG_RECORD_LENGTH 1000 #define EVT_ON_SEND _T("OnSend") #define EVT_ON_RECEIVE _T("OnReceive") #define EVT_ON_CLOSE _T("OnClose") #define EVT_ON_ERROR _T("OnError") #define EVT_ON_PREPARE_CONNECT _T("OnPrepareConnect") #define EVT_ON_PREPARE_LISTEN _T("OnPrepareListen") #define EVT_ON_ACCEPT _T("OnAccept") #define EVT_ON_CONNECT _T("OnConnect") #define EVT_ON_HAND_SHAKE _T("OnHandShake") #define EVT_ON_SHUTDOWN _T("OnShutdown") #define EVT_ON_END_TEST _T("END TEST") #define EVT_ON_MESSAGE_BEGIN _T("OnMessageBegin") #define EVT_ON_REQUEST_LINE _T("OnRequestLine") #define EVT_ON_STATUS_LINE _T("OnStatusLine") #define EVT_ON_HEADER _T("OnHeader") #define EVT_ON_HEADERS_COMPLETE _T("OnHeadersComplete") #define EVT_ON_BODY _T("OnBody") #define EVT_ON_CHUNK_HEADER _T("OnChunkHeader") #define EVT_ON_CHUNK_COMPLETE _T("OnChunkComplete") #define EVT_ON_MESSAGE_COMPLETE _T("OnMessageComplete") #define EVT_ON_UPGRADE _T("OnUpgrade") #define EVT_ON_PARSE_ERROR _T("OnParseError") #define MAX_STUDIOID_LENGTH 37 #define MAX_ACCOUNT_LENGTH 17 #define MAX_PASSWORD_LENGTH 17 enum EnAppState { ST_STARTING, ST_STARTED, ST_CONNECTING, ST_CONNECTED, ST_STOPPING, ST_STOPPED }; enum ProtocolCmd { //----------------------------: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); ////////////////////////////////////////////////////////////////////////// C2CCMD_NEW_ORDERINFO = 2007, // 开单; C2CCMD_DEL_ORDERINFO = 2008, // 删除订单; C2CCMD_MOD_ORDERINFO = 2009, // 修改订单; C2CCMD_MOD_ORDERINFO2 = 2089, // 修改订单; C2CCMD_QRY_ORDERINFO = 2010, // 查询订单; ////////////////////////////////////////////////////////////////////////// C2CCMD_NEW_PRODUCT = 2012, // 添加商品; C2CCMD_MOD_PRODUCT = 2013, // 修改商品; C2CCMD_DEL_PRODUCT = 2014, // 删除商品; C2CCMD_QRY_PRODUCT = 2015, // 查询商品; ////////////////////////////////////////////////////////////////////////// C2CCMD_NEW_CUSTOMERFROM = 2016, // 添加顾客来源; C2CCMD_DEL_CUSTOMERFROM = 2017, // 删除顾客来源; C2CCMD_MOD_CUSTOMERFROM = 2018, // 修改顾客来源; C2CCMD_QRY_CUSTOMERFROM = 2019, // 查询顾客来源; ////////////////////////////////////////////////////////////////////////// C2CCMD_NEW_CUSTOMERINFO = 2020, // 添加新顾客信息; C2CCMD_DEL_CUSTOMERINFO = 2021, // 删除顾客信息; C2CCMD_MOD_CUSTOMERINFO = 2022, // 修改顾客信息; C2CCMD_QRY_CUSTOMERINFO = 2023, // 查询顾客信息; ////////////////////////////////////////////////////////////////////////// C2CCMD_NEW_DEPARTMENT = 2024, // 新增部门信息; C2CCMD_DEL_DEPARTMENT = 2025, // 删除部门信息; C2CCMD_MOD_DEPARTMENT = 2026, // 修改部门信息; C2CCMD_QRY_DEPARTMENT = 2027, // 查询部门信息; ////////////////////////////////////////////////////////////////////////// C2CCMD_NEW_STAFFINFO = 2028, // 新增员工信息; C2CCMD_DEL_STAFFINFO = 2029, // 删除员工信息; C2CCMD_MOD_STAFFINFO = 2030, // 修改员工信息; C2CCMD_QRY_STAFFINFO = 2031, // 查询员工信息; ////////////////////////////////////////////////////////////////////////// C2CCMD_NEW_USERINFO = 2032, // 新增用户信息; C2CCMD_DEL_USERINFO = 2033, // 删除用户信息; C2CCMD_MOD_USERINFO = 2034, // 修改用户信息; C2CCMD_QRY_USERINFO = 2035, // 查询用户信息; ////////////////////////////////////////////////////////////////////////// C2CCMD_NEW_SCENERY = 2036, // 新增景点信息; C2CCMD_DEL_SCENERY = 2037, // 删除景点信息; C2CCMD_MOD_SCENERY = 2038, // 修改景点信息; C2CCMD_QRY_SCENERY = 2039, // 查询景点信息; ////////////////////////////////////////////////////////////////////////// C2CCMD_NEW_ORDERTYPE = 2040, // 新增订单类型信息; C2CCMD_DEL_ORDERTYPE = 2041, // 删除订单类型信息; C2CCMD_MOD_ORDERTYPE = 2042, // 修改订单类型信息; C2CCMD_QRY_ORDERTYPE = 2043, // 查询订单类型信息; ////////////////////////////////////////////////////////////////////////// C2CCMD_NEW_PRODUCTTYPE = 2044, // 添加商品类型; C2CCMD_MOD_PRODUCTTYPE = 2045, // 修改商品类型; C2CCMD_DEL_PRODUCTTYPE = 2046, // 删除商品类型; C2CCMD_QRY_PRODUCTTYPE = 2047, // 查询商品类型; ////////////////////////////////////////////////////////////////////////// C2CCMD_NEW_PACKAGETYPE = 2048, // 添加套系类型; C2CCMD_DEL_PACKAGETYPE = 2049, // 修改套系类型; C2CCMD_MOD_PACKAGETYPE = 2050, // 删除套系类型; C2CCMD_QRY_PACKAGETYPE = 2051, // 查询套系类型; ////////////////////////////////////////////////////////////////////////// C2CCMD_NEW_PACKAGEINFO = 2052, // 添加套系信息; C2CCMD_DEL_PACKAGEINFO = 2053, // 删除套系信息; C2CCMD_MOD_PACKAGEINFO = 2054, // 修改套系信息; C2CCMD_QRY_PACKAGEINFO = 2055, // 查询套系信息; ////////////////////////////////////////////////////////////////////////// C2CCMD_NEW_PACKAGEITEM = 2056, // 添加套系项目; C2CCMD_DEL_PACKAGEITEM = 2057, // 修改套系项目; C2CCMD_MOD_PACKAGEITEM = 2058, // 删除套系项目; C2CCMD_QRY_PACKAGEITEM = 2059, // 查询套系项目; C2CCMD_QRY_PACKAGEITEM_DETAIL = 2072, // 查询套系项目详情; ////////////////////////////////////////////////////////////////////////// C2CCMD_NEW_ORDERPACKAGEITEM = 2060, // 添加套系项目; C2CCMD_NEW_ORDERPACKAGEITEM2 = 2087, // 添加订单套餐项目(删除以前的); C2CCMD_DEL_ORDERPACKAGEITEM = 2061, // 修改套系项目; C2CCMD_MOD_ORDERPACKAGEITEM = 2062, // 删除套系项目; C2CCMD_QRY_ORDERPACKAGEITEM = 2063, // 查询套系项目; ////////////////////////////////////////////////////////////////////////// C2CCMD_NEW_SYSCONFING = 2064, // 添加影楼配置信息; C2CCMD_DEL_SYSCONFING = 2065, // 删除影楼配置信息; C2CCMD_MOD_SYSCONFING = 2066, // 修改影楼配置信息; C2CCMD_QRY_SYSCONFING = 2067, // 查询影楼配置信息; ////////////////////////////////////////////////////////////////////////// C2CCMD_NEW_STUDIOINFO = 2068, // 添加影楼信息; C2CCMD_DEL_STUDIOINFO = 2069, // 删除影楼信息; C2CCMD_MOD_STUDIOINFO = 2070, // 修改影楼信息; C2CCMD_QRY_STUDIOINFO = 2071, // 查询影楼信息; // .预留,若SQL数据库引擎未启用TCP/IP作为远程连接方式,需定义读写表的具体命令;(Jeff.100%的不建议使用这种方式获取数据,占用太多带宽和资源) // .若要使用SQL,则只允许SQL的updata、insert、delete、drop……等命令,不允许使用select来返回查询到数据; //C2CCMD_QRY_PACKAGEITEM_DETAIL = 2072, // 查询套系项详情; C2CCMD_QRY_PACKAGEITEM_VIEW = 2073, // 查询套系项详情; C2CCMD_NEW_PACKAGEITEM_MUTI = 2074, // 多个项同时插入到套系中; C2CCMD_NEW_PACKAGEITEM2 = 2075, // 添加套系项目; // 订单景点信息; C2CCMD_NEW_ORDERSCENERY = 2076, // 添加订单景点信息; C2CCMD_NEW_ORDERSCENERY2 = 2088, // 添加订单景点信息(删除以前的); C2CCMD_DEL_ORDERSCENERY = 2077, // 删除订单景点信息,使用autoid; C2CCMD_MOD_ORDERSCENERY = 2078, // 修改订单景点信息; C2CCMD_QRY_ORDERSCENERY = 2079, // 查询订单景点信息; C2CCMD_DEL_ORDERSCENERY2 = 2080, // 删除订单景点信息,使用订单号+景点名; // 订单商品信息; C2CCMD_NEW_ORDERPRODUCT = 2081, // 添加订单商品信息; C2CCMD_DEL_ORDERPRODUCT = 2082, // 删除订单商品信息; C2CCMD_MOD_ORDERPRODUCT = 2083, // 修改订单商品信息; C2CCMD_QRY_ORDERPRODUCT = 2084, // 查询订单商品信息; // 获取订单序号; C2CCMD_GET_ORDER_SERIALNUMBER = 2085, // 获取订单序号; // 获取打印序号; C2CCMD_GET_PRINT_SERIALNUMBER = 2086, // 获取打印序号; C2CCMD_OTHER_INFO = 2999, // 读其它信息; }; enum PackageFlag { PACKAGE_ONESELF = 0, // 协议包-独立; PACKAGE_MULTIPLE = 1, // 协议包-多个; }; enum UserLogInStatus { USER_LOGIN = 1, // 登录成功; USER_PW_MISTAKE = 2, // 密码错误; USER_HAVE_LOGIN = 3, // 用户已经登录; USER_NULL = 0 // 没有用户; }; typedef struct __LogInUser__ { TCHAR szStudioId[MAX_STUDIOID_LENGTH]; // 影楼Guid; TCHAR szAccount[MAX_ACCOUNT_LENGTH]; // 账号; TCHAR szPassword[MAX_PASSWORD_LENGTH]; // 密码; }LogInUser,*pLogInUser; #pragma pack(push,1) // 协议头-勿更改; typedef struct __THEPROPACKAGE__ { byte flag; // 协议包类型标识; short nCmd; // 协议携带的命令标识; //unsigned int nUnCompressLen; unsigned int nDataLen; // 数据长度,除了头之外的数据; unsigned int nSubDataLen; // 分包大小; DWORD dwReserve; // 预留填0; TCHAR szStudioId[MAX_STUDIOID_LENGTH]; // 影楼Guid; TCHAR szAccount[MAX_ACCOUNT_LENGTH]; // 账号; TCHAR szPassword[MAX_PASSWORD_LENGTH]; // 密码; //BYTE byProp[5]; BYTE byBody[2]; // 包数据; __THEPROPACKAGE__(){ flag = PACKAGE_ONESELF; nCmd = 0; nDataLen = 0; nSubDataLen = 0; dwReserve = 0; memset(byBody, 0, 2); //memset(byProp, 0, 5); memset(szStudioId, 0, sizeof(TCHAR)*MAX_STUDIOID_LENGTH); memset(szAccount, 0, sizeof(TCHAR)*MAX_ACCOUNT_LENGTH); memset(szPassword, 0, sizeof(TCHAR)*MAX_PASSWORD_LENGTH); } }TheProPackage,*pTheProPackage; #pragma pack(pop) struct info_msg { LPCTSTR name; CONNID connID; LPCTSTR evt; int contentLength; LPCTSTR content; static info_msg* Construct(CONNID dwConnID, LPCTSTR lpszEvent, int iContentLength = 0, LPCTSTR lpszContent = nullptr, LPCTSTR lpszName = nullptr); static void Destruct(info_msg* pMsg); private: info_msg(CONNID dwConnID, LPCTSTR lpszEvent, int iContentLength = 0, LPCTSTR lpszContent = nullptr, LPCTSTR lpszName = nullptr); ~info_msg(); }; struct TPkgHeader { DWORD seq; int body_len; }; struct TPkgBody { char name[30]; short age; char desc[1]; }; struct TPkgInfo { bool is_header; int length; TPkgInfo(bool header = true, int len = sizeof(TPkgHeader)) : is_header(header), length(len) {} void Reset() {is_header = true, length = sizeof(TPkgHeader);} ~TPkgInfo() {} }; CBufferPtr* GeneratePkgBuffer(DWORD seq, LPCTSTR lpszName, short age, LPCTSTR lpszDesc); CBufferPtr* GeneratePkgBuffer(const TPkgHeader& header, const TPkgBody& body); void SetMainWnd(CWnd* pWnd); void SetInfoList(CListBox* pInfoList); void LogServerStart(LPCTSTR lpszAddress, USHORT port, LPCTSTR lpszName = nullptr); void LogServerStartFail(DWORD code, LPCTSTR lpszDesc, LPCTSTR lpszName = nullptr); void LogServerStop(LPCTSTR lpszName = nullptr); void LogServerStopFail(DWORD code, LPCTSTR lpszDesc, LPCTSTR lpszName = nullptr); void LogClientStart(LPCTSTR lpszAddress, USHORT port, LPCTSTR lpszName = nullptr); void LogClientStarting(LPCTSTR lpszAddress, USHORT port, LPCTSTR lpszName = nullptr); void LogClientStartFail(DWORD code, LPCTSTR lpszDesc, LPCTSTR lpszName = nullptr); void LogClientStopping(CONNID dwConnID, LPCTSTR lpszName = nullptr); void LogClientStopFail(DWORD code, LPCTSTR lpszDesc, LPCTSTR lpszName = nullptr); void LogSend(CONNID dwConnID, LPCTSTR lpszContent, LPCTSTR lpszName = nullptr); void LogClientSendFail(int iSequence, int iSocketIndex, DWORD code, LPCTSTR lpszDesc, LPCTSTR lpszName = nullptr); void LogSendFail(CONNID dwConnID, DWORD code, LPCTSTR lpszDesc, LPCTSTR lpszName = nullptr); void LogDisconnect(CONNID dwConnID, LPCTSTR lpszName = nullptr); void LogDisconnectFail(CONNID dwConnID, LPCTSTR lpszName = nullptr); void LogRelease(CONNID dwConnID, LPCTSTR lpszName = nullptr); void LogReleaseFail(CONNID dwConnID, LPCTSTR lpszName = nullptr); void LogDetect(CONNID dwConnID, LPCTSTR lpszName = nullptr); void LogDetectFail(CONNID dwConnID, LPCTSTR lpszName = nullptr); void LogOnConnect(CONNID dwConnID, const CString& strAddress, USHORT usPort); void LogOnConnect2(CONNID dwConnID, LPCTSTR lpszName = nullptr); void LogOnHandShake2(CONNID dwConnID, LPCTSTR lpszName = nullptr); void PostOnSend(CONNID dwConnID, const BYTE* pData, int iLength, LPCTSTR lpszName = nullptr); void PostOnReceive(CONNID dwConnID, const BYTE* pData, int iLength, LPCTSTR lpszName = nullptr); void PostOnReceiveCast(CONNID dwConnID, LPCTSTR lpszAddress, USHORT usPort, const BYTE* pData, int iLength, LPCTSTR lpszName = nullptr); void PostOnClose(CONNID dwConnID, LPCTSTR lpszName = nullptr); void PostOnError(CONNID dwConnID, int enOperation, int iErrorCode, LPCTSTR lpszName = nullptr); void PostOnAccept(CONNID dwConnID, LPCTSTR lpszAddress, USHORT usPort, BOOL bPass, LPCTSTR lpszName = nullptr); void PostOnAccept2(CONNID dwConnID, LPCTSTR lpszName = nullptr); void PostOnHandShake(CONNID dwConnID, LPCTSTR lpszName = nullptr); void PostOnPrepareListen(LPCTSTR lpszAddress, USHORT usPort, LPCTSTR lpszName = nullptr); void PostOnPrepareConnect(CONNID dwConnID, LPCTSTR lpszName = nullptr); void PostOnConnect(CONNID dwConnID, LPCTSTR lpszAddress, USHORT usPort, LPCTSTR lpszName = nullptr); void PostOnConnect2(CONNID dwConnID, LPCTSTR lpszAddress, USHORT usPort, LPCTSTR lpszName = nullptr); void PostOnConnect3(CONNID dwConnID, LPCTSTR lpszName = nullptr); void PostOnShutdown(LPCTSTR lpszName = nullptr); void PostServerStatics(const LONGLONG& llTotalSent, const LONGLONG& llTotalReceived, LPCTSTR lpszName = nullptr); void PostTimeConsuming(DWORD dwTickCount, LPCTSTR lpszName = nullptr); void PostOnMessageBegin(CONNID dwConnID, LPCTSTR lpszName = nullptr); void PostOnRequestLine(CONNID dwConnID, LPCSTR lpszMethod, USHORT usUrlFieldSet, LPCSTR lpszUrl, LPCTSTR lpszName = nullptr); void PostOnStatusLine(CONNID dwConnID, USHORT usStatusCode, LPCSTR lpszDesc, LPCTSTR lpszName = nullptr); void PostOnHeader(CONNID dwConnID, LPCSTR lpszHeaderName, LPCSTR lpszHeaderValue, LPCTSTR lpszName = nullptr); void PostOnHeadersComplete(CONNID dwConnID, LPCSTR lpszSummary, LPCTSTR lpszName = nullptr); void PostOnBody(CONNID dwConnID, const BYTE* pData, int iLength, LPCTSTR lpszName = nullptr); void PostOnChunkHeader(CONNID dwConnID, int iLength, LPCTSTR lpszName = nullptr); void PostOnChunkComplete(CONNID dwConnID, LPCTSTR lpszName = nullptr); void PostOnMessageComplete(CONNID dwConnID, LPCTSTR lpszName = nullptr); void PostOnUpgrade(CONNID dwConnID, EnHttpUpgradeType enUpgradeType, LPCTSTR lpszName = nullptr); void PostOnParseError(CONNID dwConnID, int iErrorCode, LPCSTR lpszErrorDesc, LPCTSTR lpszName = nullptr); void PostInfoMsg(info_msg* msg); void LogInfoMsg(info_msg* pInfoMsg); void LogMsg(const CString& msg); #ifdef _SSL_SUPPORT extern int g_c_iVerifyMode; extern BOOL g_c_bNeedClientVerification; extern LPCTSTR g_c_lpszCAPemCertFileOrPath; extern LPCTSTR g_c_lpszPemCertFile; extern LPCTSTR g_c_lpszPemKeyFile; extern LPCTSTR g_c_lpszKeyPasswod; extern int g_s_iVerifyMode; extern BOOL g_s_bNeedClientVerification; extern LPCTSTR g_s_lpszCAPemCertFileOrPath; extern LPCTSTR g_s_lpszPemCertFile; extern LPCTSTR g_s_lpszPemKeyFile; extern LPCTSTR g_s_lpszKeyPasswod; #endif