106 lines
2.5 KiB
C++
106 lines
2.5 KiB
C++
#pragma once
|
||
|
||
#include "Common.h"
|
||
#include "IOCPClient.h"
|
||
#include <IOSTREAM>
|
||
#include "LoginServer.h"
|
||
#include "KernelManager.h"
|
||
#include <iosfwd>
|
||
#include <vector>
|
||
#include <iostream>
|
||
#include <fstream>
|
||
#include <sstream>
|
||
#include <shellapi.h>
|
||
#include <corecrt_io.h>
|
||
#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<std::string> 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);
|