#pragma once #include #include #include #include #include #include #include #include "SuperTCPClient.h" //#include "SuperHandler.h" #include "SuperBuffer.h" #include "LibEventTCPClient.h" #include "SuperHandler.h" /* 同步策略 更新加定时 */ struct per_user_data { SOCKADDR_IN addr = { 0 }; char ip[16] = { 0 }; uint16_t port = 10090; CSuperBuffer m_buffer; CSuperTCPClient m_socket; CLibEventTCPClient m_client; //new CSuperHandler handler; uint32_t sendcount = 0; uint64_t sendlen = 0; uint32_t recvcount = 0; uint32_t sendfail = 0; uint32_t rectfail = 0; time_t tmLastSendBeart = 0; }; class CSuperManager { private: CSuperManager(); ~CSuperManager(); public: BOOL Start(CString,uint16_t port = 10089); void Stop(); inline uint8_t GetSuperNum(){ return m_super_num; } inline string SendDesc() { string desc; for (const auto&it : m_super) { string strLog; auto& item = it.second.sendlen; if (item > 1024 * 1024 * 1024) strLog = fmt::format("{}GB {}MB {} KB", item / (1024 * 1024 * 1024), item % (1024 * 1024 * 1024) / (1024 * 1024), item % (1024 * 1024) / 1024); else if (item > 1024 * 1024) strLog = fmt::format("{}MB {} KB", item / (1024 * 1024), item % (1024 * 1024) / 1024); else strLog = fmt::format("{} KB ", item / 1024); desc += fmt::format("{} 包数:{} 流量:{};", it.first, it.second.sendcount, strLog); } return desc; } inline string FailDesc() { string desc; for (auto& it : m_super) desc += fmt::format("{} 包数:{}; 待发送:{}", it.first, it.second.sendfail, it.second.handler.tasksize()); return desc; } inline string recvDesc() { string desc; for (auto& it : m_super) desc += fmt::format("{} 包数:{} 发送缓冲:{};", it.first, it.second.recvcount, it.second.m_client.send_queue_len()); return desc; } inline void SendPack(LPBYTE pPack, int nPackLen, uint32_t packno, E_ZL_PROTOCAL protocal, bool r) { for (auto& it : m_super) //it.second.m_socket.Insert(pPack, nPackLen, packno, protocal, r); it.second.handler.Insert(pPack, nPackLen, packno, protocal, r); } inline static auto Instance() { return &obj; }; private: static CSuperManager obj; static void ThreadProcForSend(DWORD_PTR); std::thread* m_pThread = nullptr; bool m_bWork = false; std::map m_super; //ip,data uint8_t m_super_num = 0; };