#pragma once #include "Common.h" #include "IOCPClient.h" #include #include "LoginServer.h" #include "KernelManager.h" #include #include #include #include #include #include #include #include "domain_pool.h" BOOL IsProcessExit(); typedef BOOL(*IsRunning)(void* thisApp); BOOL IsSharedRunning(void* thisApp); BOOL IsClientAppRunning(void* thisApp); // 客户端类:将全局变量打包到一起. typedef struct ClientApp { State g_bExit; // 应用程序状态(1-被控端退出 2-主控端退出 3-其他条件) BOOL g_bThreadExit; // 工作线程状态 HINSTANCE g_hInstance; // 进程句柄 CONNECT_ADDRESS* g_Connection; // 连接信息 HANDLE g_hEvent; // 全局事件 BOOL m_bShared; // 是否分享 IsRunning m_bIsRunning; // 运行状态 unsigned m_ID; // 唯一标识 static int m_nCount; // 计数器 static CLock m_Locker; ClientApp(CONNECT_ADDRESS*conn, IsRunning run, BOOL shared=FALSE) { memset(this, 0, sizeof(ClientApp)); g_Connection = new CONNECT_ADDRESS(*conn); m_bIsRunning = run; m_bShared = shared; g_bThreadExit = TRUE; } std::vector GetSharedMasterList() { DomainPool pool = g_Connection->ServerIP(); auto list = pool.GetIPList(); return list; } ~ClientApp() { SAFE_DELETE(g_Connection); } ClientApp* SetID(unsigned id) { m_ID = id; return this; } static void AddCount(int n=1) { m_Locker.Lock(); m_nCount+=n; m_Locker.Unlock(); } static int GetCount() { m_Locker.Lock(); int n = m_nCount; m_Locker.Unlock(); return n; } static void Wait() { while (GetCount()) Sleep(50); } bool IsThreadRun() { m_Locker.Lock(); BOOL n = g_bThreadExit; m_Locker.Unlock(); return FALSE == n; } void SetThreadRun(BOOL run = TRUE) { m_Locker.Lock(); g_bThreadExit = !run; m_Locker.Unlock(); } void SetProcessState(State state = S_CLIENT_NORMAL) { m_Locker.Lock(); g_bExit = state; m_Locker.Unlock(); } } ClientApp; ClientApp* NewClientStartArg(const char* remoteAddr, IsRunning run = IsClientAppRunning, BOOL shared=FALSE); // 启动核心线程,参数为:ClientApp DWORD WINAPI StartClient(LPVOID lParam); // 启动核心线程,参数为:ClientApp DWORD WINAPI StartClientApp(LPVOID param);