#pragma once #include #include #include class CLibEventTCPClient; struct per_user_data; class CSendTask { public: CSendTask(LPBYTE pPack, int nPackLen, uint32_t packno, E_ZL_PROTOCAL protocal, bool); void join();//释放调用这个 private: ~CSendTask(); public: LPBYTE pdata; int nlen; uint32_t packno; E_ZL_PROTOCAL protocal; bool bRePeatSend; }; class CSuperHandler : public CProtocolHandler { public: CSuperHandler(); ~CSuperHandler(); public: BOOL HandlePack(LPBYTE pPack, int nPackLen, SOCKADDR* psa, void* pClientContext = NULL) override; BOOL RecvPack(uint32_t packno, E_ZL_PROTOCAL protocal); BOOL HandleSubNotify(LPHJDATAHEAD2 lpHead, char* json, int json_len); inline void SetFather(per_user_data* a) { m_pFather = a; } inline void SetClient(CLibEventTCPClient* pClient) { m_pClient = pClient; } inline size_t tasksize() { return m_task.size(); } //重发, 有单独线程调用 BOOL ReSend(); bool Send(uint8_t* data, uint32_t len); void Insert(LPBYTE pPack, int nPackLen, uint32_t packno, E_ZL_PROTOCAL protocal, bool); protected: per_user_data* m_pFather = nullptr; CLibEventTCPClient* m_pClient = nullptr; std::list m_task; std::mutex m_mtx; };