FXSend/QQTX/QQTX.h

160 lines
4.9 KiB
C
Raw Permalink Normal View History

2025-02-28 17:05:50 +08:00
// 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; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>0-ͷ<><CDB7>1-<2D><><EFBFBD>ȣ<EFBFBD>2-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ULONG lDataLen; //Ӧ<><D3A6><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
ULONG lRecvLen; //<2F><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
BOOL bRecvFrame; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Frame;
BYTE * pRecvFrame; //<2F>յ<EFBFBD><D5B5><EFBFBD>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 //<2F><><EFBFBD><EFBFBD>ʼ
#define QQ_etx 0x03 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define QQ_CONNECT 0x00000001 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define QQ_CONNECT_RESP 0x80000001 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
#define QQ_ACTIVE_TEST 0x00000002 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define QQ_ACTIVE_TEST_RESP 0x80000002 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
#define QQ_ManageComp 0x00000003 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ
#define QQ_ManageComp_Resp 0x80000003 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵӦ<D2B5><D3A6>
#define QQ_ManageCompUser 0x00000004 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>û<EFBFBD>
#define QQ_ManageCompUser_Resp 0x80000004 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>û<EFBFBD>Ӧ<EFBFBD><D3A6>
#define QQ_ManageGroup 0x00000005 //<2F><><EFBFBD><EFBFBD>Ⱥ
#define QQ_ManageGroup_Resp 0x80000005 //<2F><><EFBFBD><EFBFBD>ȺӦ<C8BA><D3A6>
#define QQ_SendMsg 0x00000006 //<2F><><EFBFBD><EFBFBD>Ϣ
#define QQ_SendMsg_Resp 0x80000006 //<2F><><EFBFBD><EFBFBD>ϢӦ<CFA2><D3A6>
#define QQ_GetUserStat 0x00000007 //<2F><>ȡ<EFBFBD>û<EFBFBD>״̬
#define QQ_GroupChangeNotify 0x00000008 //Ⱥ<><C8BA>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>
#define QQ_GroupChangeNotify_Resp 0x80000008
#define QQTX_MAX_DELIVER 1024 //<2F><><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
#define QQTX_ACTIVE_TESTTIME 30000 //<2F>೤ʱ<E0B3A4><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
#define QQTX_ACTIVE_TIMEOUT 10000 //<2F><>·<EFBFBD><C2B7><EFBFBD>ⳬʱʱ<CAB1><CAB1>
#define QQTX_ACTIVE_COUNTOUT 1 //<2F><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><E2B3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define QQTX_SENDSMS_TIMEOUT 20000 //<2F><><EFBFBD>Ͷ<EFBFBD><CDB6>ų<EFBFBD>ʱʱ<CAB1><CAB1>
#define QQTX_SENDSMS_RECOUNT 1 //<2F><><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>
//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;
//<2F><><EFBFBD>ڿ<EFBFBD><DABF>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>ٶ<EFBFBD>
DWORD m_dwEndSocketSendTime; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long m_lSendInterval; //<2F><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>
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_)