// QQTX.h: interface for the CQQTX class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_QQTX_H__7DF8EA3F_89A5_4FC9_8D87_131385D01734__INCLUDED_) #define AFX_QQTX_H__7DF8EA3F_89A5_4FC9_8D87_131385D01734__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 /* #include "Winsock2.h" #pragma comment(lib, "Ws2_32.lib") */ #pragma pack( push ) #pragma pack( 1 ) typedef struct _QQTX_Data_Recv { ULONG lRecvType; //接收数据类型,0-头,1-长度,2-所有数据 ULONG lDataLen; //应收字节数 ULONG lRecvLen; //已收字节数 BOOL bRecvFrame; //是否正在收Frame; BYTE * pRecvFrame; //收到的Frame }QQTX_Data_Recv; typedef struct _QQTX_Head { BYTE stx; ULONG Total_Length; ULONG Command_Id; ULONG Sequence_Id; ULONG Version; ULONG Reserved1; ULONG Reserved2; }QQTX_Head; typedef struct _QQTX_Deliver_List { long lSendID; QQTX_Head head; CString strAns; }QQTX_Deliver_List; #pragma pack( pop ) typedef void (*QQTX_RECVPROC)(QQTX_Data_Recv * pDataRecv); #define QQ_stx 0x02 //包起始 #define QQ_etx 0x03 //包结束 #define QQ_CONNECT 0x00000001 //请求连接 #define QQ_CONNECT_RESP 0x80000001 //请求连接应答 #define QQ_ACTIVE_TEST 0x00000002 //心跳检测 #define QQ_ACTIVE_TEST_RESP 0x80000002 //心跳检测应答 #define QQ_ManageComp 0x00000003 //管理企业 #define QQ_ManageComp_Resp 0x80000003 //管理企业应答 #define QQ_ManageCompUser 0x00000004 //管理企业用户 #define QQ_ManageCompUser_Resp 0x80000004 //管理企业用户应答 #define QQ_ManageGroup 0x00000005 //管理群 #define QQ_ManageGroup_Resp 0x80000005 //管理群应答 #define QQ_SendMsg 0x00000006 //发消息 #define QQ_SendMsg_Resp 0x80000006 //发消息应答 #define QQ_GetUserStat 0x00000007 //获取用户状态 #define QQ_GroupChangeNotify 0x00000008 //群成员变更 #define QQ_GroupChangeNotify_Resp 0x80000008 #define QQTX_MAX_DELIVER 1024 //最大的队列数 #define QQTX_ACTIVE_TESTTIME 30000 //多长时间进行链路检测 #define QQTX_ACTIVE_TIMEOUT 10000 //链路检测超时时间 #define QQTX_ACTIVE_COUNTOUT 1 //链路检测超过次数 #define QQTX_SENDSMS_TIMEOUT 20000 //发送短信超时时间 #define QQTX_SENDSMS_RECOUNT 1 //发送短信重试次数 //typedef CList CSendList; //typedef CTypedPtrList CQQTXSendList; //typedef CTypedPtrList CSendResp; //typedef CTypedPtrList CDeliverList; class CQQTX { public: SOCKET m_hSocket; char m_szIP[64]; long m_lPort; BOOL m_bQuitThread; DWORD m_dwEndSendTime; DWORD m_dwEndRecvTime; DWORD m_dwTestCount; BOOL m_bRecvFrame; BOOL m_bConnect; long m_bLoginQQTX; ULONG m_lSendID; QQTX_Deliver_List* m_pDeliverList; long m_lDeliverList; char m_szQQTXIP[32]; TCHAR m_szQQTXUser[32]; TCHAR m_szQQTXPasswd[32]; TCHAR m_szQQTXKey[32]; long m_lConnectType; BOOL m_bInitQQTX; CRITICAL_SECTION m_CriDeliverList; CRITICAL_SECTION m_CriSendFrame; ULONG m_lID; QQTX_RECVPROC m_pRecvProc; //用于控制发送速度 DWORD m_dwEndSocketSendTime; //最后短信发出间隔 long m_lSendInterval; //发送间隔 HANDLE m_hThread; HANDLE m_hThread_Send; CRITICAL_SECTION m_CriErrMsg; CString m_strErrMsg; public: BOOL isConnectGateWay(); void SetErrMsg(CString str); CString GetErrMsg(); long GetReportSms(); long GetWFSms(); void SetSendSpeed(long lSpeed); BOOL Deliver_Add(QQTX_Deliver_List Deliver); void UCS2ToAscii2( char * pUCS2 , char * pAscii , long lSrcLen ); BOOL QQTX_Exit(); BOOL GetDeliver(QQTX_Deliver_List &deliver); long Process_Other(QQTX_Head head,CString strAns); long Process_Active(QQTX_Head head, CString strAns); BOOL InitQQTX2(); long Process_Connect(QQTX_Head head, CString strAns ); long SendFrame(SOCKET sock,ULONG &lID,DWORD &dwEndSendTime,ULONG lCommandID,CString strReq,ULONG & lSeq ); long QQTX_Init(const TCHAR *pIP,USHORT lPort, const TCHAR *pUser, const TCHAR *pPasswd,const TCHAR * pKey,int lConnectType); BOOL RecvFrame(QQTX_Data_Recv &Drecv); static BOOL ReadFrame(SOCKET s, QQTX_Data_Recv *pRecv); void SetRecvProc(QQTX_RECVPROC proc); static DWORD WINAPI SocketRecv( LPVOID lParam ); static DWORD WINAPI SocketSend( LPVOID lParam ); static long Send(SOCKET sock,BYTE *pData, long lLen); void Close(); static BOOL isSocketClose(SOCKET s); void Stop(); BOOL isConnect(); BOOL Connect2(); BOOL Connect( const char * pAddr , long lPort , BOOL bReConnect = true ); CQQTX(); virtual ~CQQTX(); }; #endif // !defined(AFX_QQTX_H__7DF8EA3F_89A5_4FC9_8D87_131385D01734__INCLUDED_)