FXSend/QQTX/QQTX.h
2025-02-28 17:05:50 +08:00

160 lines
4.9 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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_)