Files
SimpleRemoter/client/ClientDll.h
2025-06-14 22:56:47 +02:00

97 lines
2.2 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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);