| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 | 
							- #pragma once
 
- #include <thread>
 
- #include <mutex>
 
- #include <map>
 
- #include <string>
 
- #include <UDPSocket.h>
 
- #include <ProtocolHandler.h>
 
- #include <ZlDataDefine.h>
 
- #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<std::string, per_user_data> m_super;  //ip,data
 
- 	uint8_t m_super_num = 0;
 
- };
 
 
  |