160 lines
4.9 KiB
C++
160 lines
4.9 KiB
C++
// 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<QQTX_Send_List , QQTX_Send_List&> CSendList;
|
||
//typedef CTypedPtrList<CPtrList, QQTX_Send_List*> CQQTXSendList;
|
||
//typedef CTypedPtrList<CPtrList, QQTX_Send_Resp*> CSendResp;
|
||
//typedef CTypedPtrList<CPtrList, QQTX_Deliver_List*> 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_)
|