#pragma once ////////////////////////////////////////////////////////////////////////// #ifdef UNICODE #define BUFFER_SIZE 500000 #define MAXTHREAD_COUNT 8 #define MAX_LOGINUSER 50 //最大支持同时在线的用户数 #else #define BUFFER_SIZE 300000 #define MAXTHREAD_COUNT 16 #ifdef _DEBUG #define MAX_LOGINUSER 30 //最大支持同时在线的用户数 #else #define MAX_LOGINUSER 2000 //最大支持同时在线的用户数 #endif #endif #define MIN_SQLCONNECT 15 //最小同时连接SQL数据库 #define MAX_SQLCONNECT 150 //最大同时连接SQL数据库 #define SQL_TIMEOUT_USE 30*60*1000 //使用状态中的SQL,30分钟超时 #define SQL_TIMEOUT_DISUSE 15*60*1000 //非使用中的SQL,15分钟超时 ////////////////////////////////////////////////////////////////////////// // //完成端口完成的事件 // typedef enum { IOCP_COMPLETE_NULL, IOCP_COMPLETE_READ, IOCP_COMPLETE_ACCEPT_READ, IOCP_COMPLETE_WRITE, IOCP_COMPLETE_ACCEPT }IOCP_COMPLETE_STATE; // //自定义枚举数据类型,用来标识套接字IO动作类型 // typedef enum { IOCP_NULL, //AcceptEx/accept IOCP_ACCEPT, //AcceptEx/accept IOCP_READ, //WSARecv/recv/ReadFile IOCP_WRITE, //WSASend/send/WriteFile IOCP_END, IOCP_WRITE2, //WSASend/send/WriteFile }IOCP_OPERATION, *IOCP_OPERATION_PTR; // //自定义结构,即“完成键”(单句柄数据) // typedef struct { SOCKET socket; long lRandID; }IOCP_KEY,*IOCP_KEY_PTR; // //标志SOCKET的当前状态 // enum { SOCKET_STATE_NOT_CONNECT, SOCKET_STATE_CONNECT, SOCKET_STATE_CONNECT_AND_READ, SOCKET_STATE_TIMEOUT }; //用于接收的IO typedef struct { WSAOVERLAPPED ol; SOCKET socket; IOCP_OPERATION operation; volatile int state; long lRandID; //判断状态用 WSABUF wsaBuf; //共有5个可用的head用于发送 }IOCP_IO_SEND,*IOCP_IO_SEND_PTR; // //单IO数据,扩展的WSAOVERLAPPED // typedef struct { WSAOVERLAPPED ol; SOCKET socket; IOCP_OPERATION operation; volatile int state; long lRandID; //判断状态用 WSABUF wsaBuf; long lRecvLen; //原来用于ProcessSocket的数据 TCHAR m_szIP[32]; //对方的ip UINT m_lPort; //对方的端口 UINT m_lLocalPort; //本地端口 SYSTEMTIME m_LoginTime; //登录时间 TCHAR m_szCorpName[96]; //企业名称 TCHAR m_szLoginName[32]; //登录名称 long m_lLoginCount; //登录次数 UCHAR m_ucUserType; //用户类型 long m_lCorpID; //企业ID long m_lUserID; //用户ID long m_lAgentID; //此企业的代理商ID long m_lYWYAgent; long m_lAgentType; //代理类型 ULONG m_ulPurviewType; //权限类型 ULONG m_ulPurview; //权限 long m_lVer; long m_lAccessGroup; //允许操作的通讯录组 BOOL m_bCheckup; BOOL m_bCompress; //发送数据时,是否压缩 DWORD m_dwSendCount; //发送计数,用于控制优先级 DWORD m_dwLastSend; //最后发送时间,用于区别是否需要重新计数 long m_lFStep; //敏感字级别 ULONG m_lID; BOOL m_bCmpp; //是否Cmpp协议 long m_lSDK; //SDK类型 DWORD dwAcceptTime; //接收连接的时间 DWORD dwEndRecvFrame; //最后收到帧的时间 IOCP_KEY_PTR pKey; //对应的key参数 // IOCP_IO_SEND IOS; char buf[BUFFER_SIZE]; }IOCP_IO,*IOCP_IO_PTR; typedef struct { BOOL bUse; long lRandID; CAdoConnection adoConnection; DWORD dwBeginUse; DWORD dwEndUse; long lFuncID; long lUserID; }IOCP_SQL,*IOCP_SQL_PTR; //CMPP 协议参数与结构定义 #define CMPP_CONNECT 0x00000001 //请求连接 #define CMPP_CONNECT_RESP 0x80000001 //请求连接应答 #define CMPP_TERMINATE 0x00000002 //终止连接 #define CMPP_TERMINATE_RESP 0x80000002 //终止连接应答 #define CMPP_SUBMIT 0x00000004 //提交短信 #define CMPP_SUBMIT_RESP 0x80000004 //提交短信应答 #define CMPP_DELIVER 0x00000005 //短信下发 #define CMPP_DELIVER_RESP 0x80000005 //下发短信应答 #define CMPP_QUERY 0x00000006 //发送短信状态查询 #define CMPP_QUERY_RESP 0x80000006 //发送短信状态查询应答 #define CMPP_CANCEL 0x00000007 //删除短信 #define CMPP_CANCEL_RESP 0x80000007 //删除短信应答 #define CMPP_ACTIVE_TEST 0x00000008 //激活测试 #define CMPP_ACTIVE_TEST_RESP 0x80000008 //激活测试应答 #define CMPP_FWD 0x00000009 //消息前转 #define CMPP_FWD_RESP 0x80000009 //消息前转应答 #define CMPP_MT_ROUTE 0x00000010 //MT路由请求 #define CMPP_MT_ROUTE_RESP 0x80000010 //MT路由请求应答 #define CMPP_MO_ROUTE 0x00000011 //MO路由请求 #define CMPP_MO_ROUTE_RESP 0x80000011 //MO路由请求应答 #define CMPP_GET_ROUTE 0x00000012 //获取路由请求 #define CMPP_GET_ROUTE_RESP 0x80000012 //获取路由请求应答 #define CMPP_MT_ROUTE_UPDATE 0x00000013 //MT路由更新 #define CMPP_MT_ROUTE_UPDATE_RESP 0x80000013 //MT路由更新应答 #define CMPP_MO_ROUTE_UPDATE 0x00000014 //MO路由更新 #define CMPP_MO_ROUTE_UPDATE_RESP 0x80000014 //MO路由更新应答 #define CMPP_PUSH_MT_ROUTE_UPDATE 0x00000015 //MT路由更新 #define CMPP_PUSH_MT_ROUTE_UPDATE_RESP 0x80000015 //MT路由更新应答 #define CMPP_PUSH_MO_ROUTE_UPDATE 0x00000016 //MO路由更新 #define CMPP_PUSH_MO_ROUTE_UPDATE_RESP 0x80000016 //MO路由更新应答 #pragma pack( push ) #pragma pack( 1 ) typedef struct _Cmpp_Head { ULONG Total_Length; ULONG Command_Id; ULONG Sequence_Id; }Cmpp_Head; typedef struct _Cmpp_Connect { char Source_Addr[6]; UCHAR AuthenticatorSource[16]; UCHAR Version; ULONG Timestamp; }Cmpp_Connect; typedef struct _Cmpp_Connect_Resp { UCHAR Status; UCHAR AuthenticatorSource[16]; UCHAR Version; }Cmpp_Connect_Resp; typedef struct _Cmpp_Active_Test_Resp { UCHAR Reserved; }Cmpp_Active_Test_Resp; typedef struct _Cmpp_Terminate_Resp { }Cmpp_Terminate_Resp; typedef struct _Cmpp_Submit { LONGLONG Msg_ID; UCHAR Pk_total; UCHAR Pk_number; UCHAR Registered_Delivery; UCHAR Msg_level; UCHAR Service_Id[10]; UCHAR Fee_UserType; UCHAR Fee_terminal_Id[21]; UCHAR TP_pId; UCHAR TP_udhi; UCHAR Msg_Fmt; UCHAR Msg_src[6]; UCHAR FeeType[2]; UCHAR FeeCode[6]; UCHAR ValId_Time[17]; UCHAR At_Time[17]; UCHAR Src_Id[21]; UCHAR DestUsr_tl; UCHAR Dest_terminal_Id[21]; UCHAR Msg_Length; }Cmpp_Submit; typedef struct _Cmpp_Submit_Resp { LONGLONG Msg_ID; UCHAR Result; }Cmpp_Submit_Resp; typedef struct _Send_List { ULONG lSendID; //数据库中记录的SendID ULONG lSeq; //发送cmpp里的序号 ULONG lCmppSeq; //使用cmpp转接的源序号 ULONG lSendTime; //最后一次发送时间 ULONG lReSendCount; //重复发送了多少次 UCHAR Msg[512]; //信息内容 Cmpp_Submit Submit; }Send_List; typedef struct _SmsReport { long lSmsReportID; CString strMsgID; long lReportStatus; CString strRecvStatus; long lSendFCS; CString strMobile; }SmsReport; typedef struct _FXSend_MT { long SendID; long CorpID; long UserID; CString GroupID; long Status; CString MsgID; long SendRet; long SendFCS; long ReSendCount; CString Sender; CString SendNum; CString Recver; CString RecvNum; long RecvNumType; CString Msg; long MsgType; COleDateTime SubTime; COleDateTime Timer; long Priority; long StatusReport; COleDateTime OvrTime; COleDateTime SendTime; COleDateTime RecvTime; CString RecvStatus; long KF; CString IP; CString SM_ID; CString TRANS_CODE; CString ORGAN_CODE; COleDateTime tAddThisTime; }FXSend_MT; //发送返回状态 typedef struct _Send_Resp { ULONG lSendID; //数据库中记录的SendID ULONG lResult; //返回状态 ULONG lReSendCount; //重复发送了多少次 LONGLONG lMsgID; //发送成功时有此返回 }Send_Resp; typedef struct _Cmpp_Deliver { LONGLONG Msg_ID; UCHAR Dest_Id[21]; UCHAR Service_Id[10]; UCHAR TP_pid; UCHAR TP_udhi; UCHAR Msg_Fmt; UCHAR Src_terminal_Id[21]; UCHAR Registered_Delivery; UCHAR Msg_Length; }Cmpp_Deliver; typedef struct _Cmpp_Status { LONGLONG Msg_ID; UCHAR Stat[7]; UCHAR Submit_time[10]; UCHAR Done_time[10]; UCHAR Dest_terminal_Id[21]; ULONG SMSC_sequence; }Cmpp_Status; typedef struct _Cmpp_Deliver_Resp { LONGLONG Msg_ID; UCHAR Result; }Cmpp_Deliver_Resp; #pragma pack( pop )