⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 commonsms.h

📁 短信防伪系统服务器端
💻 H
字号:
#ifndef _COMMON_SMS_H_
#define _COMMON_SMS_H_
#include <winsock2.h>

struct SUBMIT_SMS           //结构长度为512字节
{
    int     protrol;        //运营商协议 0- 移动,1-联通2-网通3-电信,4-短信猫
    __int64 msgId;          //消息id
    int     pkSeqId;        //消息Id所在包的流水序号
    int     len;            //消息长度
    int     result;         //发送结果
    char    smgMsgId[24];   //网关返回的唯一标识
    char    pkg[464];       //消息包体
};
struct  DELIVER_SMS
{
    int     protrol;         //运营商协议 0- 移动,1-联通2-网通3-电信,4-短信猫
    char    corpId[12];      //企业代码
    char    srcTermid[24];   //服务代码
    char    destTermid[24];  //服务代码
    char    smgMsgId[24];    //网关的唯一标识
    int     msgFormat;       //消息格式
    char    msgContent[256]; //接收内容
    char    linkId[24];      //临时定购关系
};
struct  MTREPORT_SMS
{
    int     protrol;         //运营商协议 0- 移动,1-联通2-网通3-电信,4-短信猫
    char    corpId[12];      //企业代码
    char    srcTermid[24];   //服务代码
    char    destTermid[24];  //服务代码
    char    smgMsgId[24];    //网关的唯一标识
    char    state[8];        //返回结果
    int     errorCode;       //发送结果
};
struct WND_DATA
{
    long  time;    //发送时间 
    int   send;    //事发发送 0- 未发送,1-发送成功,2-发送失败
    int   trys;    //重发次数
    SUBMIT_SMS  *lpBuff; //发送缓冲区   
    int   len;     //发送缓冲区长度
    int   seqid;   //消息流水号
};
class  CCommonSMS
{
public:
    static long m_Instance;
public:
    CCommonSMS();
    ~CCommonSMS();
protected:
    bool m_bQuit;
    int  m_nThreadPools;            //线程数量
    int  m_nWndSize;                //发送窗口数量 
    int  m_nTimeOut;                //超时时间
    int  m_nTrys;                   //重发次数
    int  m_nNextEventIndex;         //循环监听下个事件的起点索引
    long m_threadpoolsinstance;     //线程实例数量,当为0时释放
    HANDLE *m_phSemaphoreWnd;       //线程信号量,控制发送窗口大小
    HANDLE *m_phWaitSubmitEvent;    //线程发送事件
    HANDLE *m_phThreadPool;         //线程句柄数组
    WND_DATA* m_pWndData;           //发送数据结构
    HANDLE  m_hQuitEvent;           //等待退出事件
    HANDLE  m_hRecvThread;          //接收线程
    HANDLE  m_hActiveThread;        //检测线程
protected:
    void (*m_OnDeliverSMS)(DELIVER_SMS   *pDeliver);
    void (*m_OnMTReportSMS)(MTREPORT_SMS *pReport);
    void (*m_OnSubmitedSMS)(SUBMIT_SMS   *pSubmited);
protected:
    unsigned int  m_nMaxSeqId;
    int  m_nWndBits;
    unsigned int  m_nSeqId;
    CRITICAL_SECTION m_csSeqId;
    SOCKET m_Socket;
    CRITICAL_SECTION m_csSocket;  
protected:
    char m_szIp[32];
    int  m_nPort;
    char m_szUser[16];
    char m_szPwd[16];
    char m_szCorpId[16];
    char m_szSeverNumber[24];
    char m_szSpNode[12];
    int  m_nLoginMode;
public:
    int  Connect();
    virtual void OnSocketError();
    virtual int  Login();
    virtual int  Logout();
protected:
    int   GetSeqid(int index);
    char* GetTimeStamp( char *buf);		                   //生成时间戳MMDDHHmmMISS     
protected:
    int Initialize(int threadpools, int wndsize,int timeout,int retrys);
    int Close(); 
    int AddThreadPoolInstance();         //管理线程池,增加一个实例加一
    int ReleaseThreadPoolInstance();     //管理线程池,减少一个实例减一0释放
    void OnDeliverSMS(DELIVER_SMS *pDeliver);
    void OnMTReportSMS(MTREPORT_SMS *pReport);
    int  Send(char *buff ,int len);                    //发送函数
    void OnSubmitedSMS(SUBMIT_SMS * p);                //发送消息结束
    void OnSubmitResp(int seqid,int result,char *smgMsgId);//接收到消息应答
    virtual int  SubmitSMS(SUBMIT_SMS *p ,int len,int seqid);  //发送函数
    static unsigned long  _stdcall ThreadRecvProc(void *lpvoid);
    static unsigned long  _stdcall ThreadActiveProc(void *lpvoid);
    virtual void OnRecv();
    virtual void OnActive();
public:
    int  OnSubmitSMS(SUBMIT_SMS *p,int len);    //收到发送消息
protected:
    class CThreadPool
    {
        public:
            CThreadPool();
            ~CThreadPool();
        public:
            CCommonSMS     *m_pParent;   
            bool      m_bQuit;            //通知线程退出
            int       m_nThreadIndex;     //发送线程索引
            int       m_nWaitSendCounts;  //待发送数量
            long      m_nWndIdles;        //窗口空闲数量 
            CRITICAL_SECTION m_csWnd;     //窗口线程互斥区
        public:
            static unsigned long  _stdcall ThreadPoolProc(void *lpvoid);
            void   Run();
            SUBMIT_SMS * ReleasesWndData(int seqid);
            void   AddWndData(SUBMIT_SMS * p ,int len );
    private:
    } *m_pThreadPool;
    friend class CThreadPool;
};
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -