Skip to content

Commit 5644e7c

Browse files
committed
added: system api module
1 parent e9857c2 commit 5644e7c

36 files changed

+869
-4
lines changed

XEngine_Source/Makefile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ THIRDPART_MODULE_JSONCPP = ./XEngine_ThirdPart/jsoncpp
99
MODULE_CONFIGURE_PATH = ./XEngine_ModuleConfigure
1010
MODULE_DATABASE_PATH = ./XEngine_ModuleDatabase
1111
MODULE_PROTOCOL_PATH = ./XEngine_ModuleProtocol
12+
MODULE_SYSTEM_PATH = ./XEngine_ModuleSystem
1213
MODULE_HELP_PATH = ./XEngine_ModuleHelp
1314
MODULE_PLUGIN_PATH = ./XEngine_ModulePlugin
1415

@@ -24,7 +25,7 @@ APP_CENTER_PATH = ./XEngine_ServiceApp/XEngine_CenterApp
2425
APP_HTTP_PATH = ./XEngine_ServiceApp/XEngine_HttpApp
2526

2627
XENGINE_MODULES = libjsoncpp.so \
27-
libXEngine_ModuleConfigure.so libXEngine_ModuleDatabase.so libXEngine_ModuleProtocol.so libXEngine_ModuleHelp.so libXEngine_ModulePlugin.so \
28+
libXEngine_ModuleConfigure.so libXEngine_ModuleDatabase.so libXEngine_ModuleProtocol.so libXEngine_ModuleSystem.so libXEngine_ModuleHelp.so libXEngine_ModulePlugin.so \
2829
libModulePlugin_Zodiac.so libModulePlugin_Password.so libModulePlugin_Timezone.so libModulePlugin_BMIndex.so libModulePlugin_Meter.so libModulePlugin_Phone.so libModulePlugin_IPAddr.so \
2930
XEngine_HttpApp.exe
3031

@@ -40,6 +41,8 @@ libXEngine_ModuleDatabase.so:
4041
make -C $(MODULE_DATABASE_PATH) PLATFORM=$(PLATFORM) $(FLAGS)
4142
libXEngine_ModuleProtocol.so:
4243
make -C $(MODULE_PROTOCOL_PATH) PLATFORM=$(PLATFORM) $(FLAGS)
44+
libXEngine_ModuleSystem.so:
45+
make -C $(MODULE_SYSTEM_PATH) PLATFORM=$(PLATFORM) $(FLAGS)
4346
libXEngine_ModuleHelp.so:
4447
make -C $(MODULE_HELP_PATH) PLATFORM=$(PLATFORM) $(FLAGS)
4548
libXEngine_ModulePlugin.so:
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
CC = g++ -Wall -std=c++17 -fPIC
2+
PLATFORM = linux
3+
PLATVER =
4+
PLATDIR =
5+
FILEEXT =
6+
LIBFLAG =
7+
RELEASE = 0
8+
UNICODE = 0
9+
LOADHDR = -I ./
10+
LOADSO = -L /usr/local/lib/XEngine_Release/XEngine_BaseLib -L /usr/local/lib/XEngine_Release/XEngine_SystemSdk
11+
LIB = -lXEngine_BaseLib -lXEngine_SystemApi
12+
LIBEX =
13+
OBJECTS = ModuleSystem_API.o pch.o
14+
15+
ifeq ($(RELEASE),1)
16+
FLAGS = -c
17+
DEBUG =
18+
else
19+
FLAGS = -c -lc_p
20+
DEBUG = -g -pg
21+
endif
22+
23+
ifeq ($(UNICODE),1)
24+
UNICODE = -D _UNICODE
25+
else
26+
UNICODE =
27+
endif
28+
29+
ifeq ($(PLATFORM),linux)
30+
ifeq (/etc/redhat-release,$(wildcard /etc/redhat-release))
31+
PLATVER = -D __CENTOS__
32+
PLATDIR = XEngine_Linux/Centos
33+
else
34+
PLATVER = -D __UBUNTU__
35+
PLATDIR = XEngine_Linux/Ubuntu
36+
endif
37+
FILEEXT = so
38+
LIBFLAG = -shared
39+
LIBEX = -lpthread -lrt -ldl
40+
LOADBIN = -Wl,-rpath=./,--disable-new-dtags
41+
else ifeq ($(PLATFORM),mac)
42+
CC += -Wno-deprecated-declarations
43+
PLATVER = -D __MACOS__
44+
PLATDIR = XEngine_Mac
45+
FILEEXT = dylib
46+
LIBFLAG = -dynamiclib
47+
LIBEX = -lpthread -ldl
48+
LOADBIN = -Wl,-rpath,@loader_path/./
49+
endif
50+
51+
52+
all:$(OBJECTS)
53+
$(CC) $(DEBUG) $(OBJECTS) -o libXEngine_ModuleSystem.$(FILEEXT) $(LIBFLAG) $(LIB) $(LIBEX) $(LOADSO) $(LOADBIN)
54+
55+
ModuleSystem_API.o:./ModuleSystem_API/ModuleSystem_API.cpp
56+
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./ModuleSystem_API/ModuleSystem_API.cpp
57+
58+
pch.o:./pch.cpp
59+
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./pch.cpp
60+
61+
62+
InstallAll:InstallSo
63+
InstallSo:./libXEngine_ModuleSystem.$(FILEEXT)
64+
cp ./libXEngine_ModuleSystem.$(FILEEXT) ../../XEngine_Release/libXEngine_ModuleSystem.$(FILEEXT)
65+
66+
67+
CleanAll:CleanObj CleanMk
68+
CleanObj:
69+
rm *.o
70+
CleanMk:
71+
rm *.$(FILEEXT)
Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
#include "pch.h"
2+
#include "ModuleSystem_API.h"
3+
/********************************************************************
4+
// Created: 2023/09/06 13:50:15
5+
// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleSystem\ModuleSystem_API\ModuleSystem_API.cpp
6+
// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleSystem\ModuleSystem_API
7+
// File Base: ModuleSystem_API
8+
// File Ext: cpp
9+
// Project: XEngine(网络通信引擎)
10+
// Author: qyt
11+
// Purpose: 系统API函数库
12+
// History:
13+
*********************************************************************/
14+
CModuleSystem_API::CModuleSystem_API()
15+
{
16+
17+
}
18+
CModuleSystem_API::~CModuleSystem_API()
19+
{
20+
21+
}
22+
//////////////////////////////////////////////////////////////////////////
23+
// 公用函数
24+
//////////////////////////////////////////////////////////////////////////
25+
/********************************************************************
26+
函数名称:ModuleSystem_API_AutoStart
27+
函数功能:注册自动启动与服务函数
28+
参数.一:bIsAuto
29+
In/Out:In
30+
类型:逻辑型
31+
可空:Y
32+
意思:是否让其自动启动,默认为真,自动启动
33+
返回值
34+
类型:逻辑型
35+
意思:是否成功
36+
备注:
37+
*********************************************************************/
38+
bool CModuleSystem_API::ModuleSystem_API_AutoStart(bool bIsAuto /* = true */)
39+
{
40+
ModuleSystem_IsErrorOccur = false;
41+
42+
#ifdef _MSC_BUILD
43+
if (bIsAuto)
44+
{
45+
IShellLinkA* pSt_ILink = NULL; //IShellLink对象指针
46+
IPersistFile* pSt_IFile = NULL; //IPersisFil对象指针
47+
//创建IShellLink对象
48+
CoInitializeEx(NULL, COINIT_MULTITHREADED);
49+
HRESULT hResult = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pSt_ILink);
50+
if (FAILED(hResult))
51+
{
52+
ModuleSystem_IsErrorOccur = true;
53+
ModuleSystem_dwErrorCode = ERROR_MODULE_SYSTEM_API_COINIT;
54+
return false;
55+
}
56+
//从IShellLink对象中获取IPersistFile接口
57+
hResult = pSt_ILink->QueryInterface(IID_IPersistFile, (void**)&pSt_IFile);
58+
if (FAILED(hResult))
59+
{
60+
ModuleSystem_IsErrorOccur = true;
61+
ModuleSystem_dwErrorCode = ERROR_MODULE_SYSTEM_API_QUERY;
62+
return false;
63+
}
64+
65+
XCHAR tszFilePath[MAX_PATH];
66+
XCHAR tszFileName[MAX_PATH];
67+
68+
memset(tszFilePath, '\0', MAX_PATH);
69+
memset(tszFileName, '\0', MAX_PATH);
70+
71+
GetCurrentDirectoryA(MAX_PATH, tszFilePath);
72+
GetModuleFileNameA(NULL, tszFileName, MAX_PATH);
73+
//目标
74+
pSt_ILink->SetPath(tszFileName);
75+
//工作目录
76+
pSt_ILink->SetWorkingDirectory(tszFilePath);
77+
//备注
78+
pSt_ILink->SetDescription(_X("XDeamon systemd service"));
79+
//显示方式
80+
pSt_ILink->SetShowCmd(SW_SHOW);
81+
//保存快捷方式到指定目录下
82+
83+
XCHAR tszAFile[MAX_PATH];
84+
WCHAR tszUFile[MAX_PATH];
85+
86+
memset(tszAFile, '\0', sizeof(tszAFile));
87+
memset(tszUFile, '\0', sizeof(tszUFile));
88+
89+
if (S_OK != SHGetFolderPathA(NULL, CSIDL_STARTUP, NULL, 0, tszAFile))
90+
{
91+
ModuleSystem_IsErrorOccur = true;
92+
ModuleSystem_dwErrorCode = ERROR_MODULE_SYSTEM_API_GETFILENAME;
93+
return false;
94+
}
95+
_tcsxcat(tszAFile, _X("\\XEngine_DeamonApp.lnk"));
96+
BaseLib_OperatorCharset_AnsiToUnicode(tszAFile, tszUFile);
97+
98+
hResult = pSt_IFile->Save(tszUFile, TRUE);
99+
if (FAILED(hResult))
100+
{
101+
ModuleSystem_IsErrorOccur = true;
102+
ModuleSystem_dwErrorCode = ERROR_MODULE_SYSTEM_API_SYSENABLE;
103+
return false;
104+
}
105+
pSt_IFile->Release();
106+
pSt_ILink->Release();
107+
CoUninitialize();
108+
}
109+
else
110+
{
111+
XCHAR tszAFile[MAX_PATH];
112+
memset(tszAFile, '\0', sizeof(tszAFile));
113+
114+
if (S_OK != SHGetFolderPathA(NULL, CSIDL_STARTUP, NULL, 0, tszAFile))
115+
{
116+
ModuleSystem_IsErrorOccur = true;
117+
ModuleSystem_dwErrorCode = ERROR_MODULE_SYSTEM_API_SYSDISABLE;
118+
return false;
119+
}
120+
_tcsxcat(tszAFile, _X("\\XEngine_DeamonApp.lnk"));
121+
_xtremove(tszAFile);
122+
}
123+
#elif __linux__
124+
LPCXSTR lpszStartStr = _X("/usr/lib/systemd/system/xdeamon.service");
125+
if (bIsAuto)
126+
{
127+
if (0 != _xtaccess(lpszStartStr, F_OK))
128+
{
129+
XCHAR tszMsgBuffer[2048];
130+
XCHAR tszFileDir[MAX_PATH];
131+
132+
memset(tszMsgBuffer, '\0', sizeof(tszMsgBuffer));
133+
memset(tszFileDir, '\0', sizeof(tszFileDir));
134+
135+
SystemApi_Process_GetPath(tszFileDir);
136+
137+
int nRet = _xstprintf(tszMsgBuffer, _X("# XDeamon systemd service file\n"
138+
"\n"
139+
"[Unit]\n"
140+
"Description=XEngine XDeamon Service\n"
141+
"Documentation=http://www.xyry.org\n"
142+
"After=network.target\n"
143+
"\n"
144+
"[Install]\n"
145+
"WantedBy=multi-user.target\n"
146+
"\n"
147+
"[Service]\n"
148+
"Type=forking\n"
149+
"PIDFile=xdeamon.pid\n"
150+
"ExecStart=%s\n"
151+
"ExecStop=kill -s QUIT $MAINPID\n"), tszFileDir);
152+
153+
if (!SystemApi_File_SaveBuffToFile(lpszStartStr, tszMsgBuffer, nRet))
154+
{
155+
return false;
156+
}
157+
}
158+
XCHAR tszServiceStr[MAX_PATH];
159+
memset(tszServiceStr, '\0', MAX_PATH);
160+
161+
_xstprintf(tszServiceStr, _X("sudo systemctl enable xdeamon"));
162+
if (-1 == system(tszServiceStr))
163+
{
164+
ModuleSystem_IsErrorOccur = true;
165+
ModuleSystem_dwErrorCode = ERROR_MODULE_SYSTEM_API_SYSENABLE;
166+
return false;
167+
}
168+
}
169+
else
170+
{
171+
XCHAR tszServiceStr[MAX_PATH];
172+
memset(tszServiceStr, '\0', MAX_PATH);
173+
174+
_xstprintf(tszServiceStr, _X("systemctl disable xdeamon"));
175+
if (-1 == system(tszServiceStr))
176+
{
177+
ModuleSystem_IsErrorOccur = true;
178+
ModuleSystem_dwErrorCode = ERROR_MODULE_SYSTEM_API_SYSDISABLE;
179+
return false;
180+
}
181+
_xtremove(lpszStartStr);
182+
}
183+
#endif
184+
return true;
185+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#pragma once
2+
/********************************************************************
3+
// Created: 2023/09/06 13:49:59
4+
// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleSystem\ModuleSystem_API\ModuleSystem_API.h
5+
// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleSystem\ModuleSystem_API
6+
// File Base: ModuleSystem_API
7+
// File Ext: h
8+
// Project: XEngine(网络通信引擎)
9+
// Author: qyt
10+
// Purpose: 系统API函数库
11+
// History:
12+
*********************************************************************/
13+
14+
class CModuleSystem_API
15+
{
16+
public:
17+
CModuleSystem_API();
18+
~CModuleSystem_API();
19+
public:
20+
bool ModuleSystem_API_AutoStart(bool bIsAuto = true);
21+
protected:
22+
private:
23+
};
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#pragma once
2+
/********************************************************************
3+
// Created: 2023/09/06 13:50:57
4+
// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleSystem\ModuleHelp_Define.h
5+
// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleSystem
6+
// File Base: ModuleHelp_Define
7+
// File Ext: h
8+
// Project: XEngine(网络通信引擎)
9+
// Author: qyt
10+
// Purpose: 模块导出定义
11+
// History:
12+
*********************************************************************/
13+
//////////////////////////////////////////////////////////////////////////
14+
// 导出函数定义
15+
//////////////////////////////////////////////////////////////////////////
16+
extern "C" XLONG ModuleSystem_GetLastError(int* pInt_ErrorCode = NULL);
17+
/************************************************************************/
18+
/* 系统函数库 */
19+
/************************************************************************/
20+
/********************************************************************
21+
函数名称:ModuleSystem_API_AutoStart
22+
函数功能:注册自动启动与服务函数
23+
参数.一:bIsAuto
24+
In/Out:In
25+
类型:逻辑型
26+
可空:Y
27+
意思:是否让其自动启动,默认为真,自动启动
28+
返回值
29+
类型:逻辑型
30+
意思:是否成功
31+
备注:
32+
*********************************************************************/
33+
extern "C" bool ModuleSystem_API_AutoStart(bool bIsAuto = true);
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#pragma once
2+
/********************************************************************
3+
// Created: 2023/09/06 13:51:12
4+
// File Name: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleSystem\ModuleHelp_Error.h
5+
// File Path: D:\XEngine_APIService\XEngine_Source\XEngine_ModuleSystem
6+
// File Base: ModuleHelp_Error
7+
// File Ext: h
8+
// Project: XEngine(网络通信引擎)
9+
// Author: qyt
10+
// Purpose: 模块导出错误
11+
// History:
12+
*********************************************************************/
13+
//////////////////////////////////////////////////////////////////////////
14+
// 系统函数错误表
15+
//////////////////////////////////////////////////////////////////////////
16+
#define ERROR_MODULE_SYSTEM_API_PARAMENT 0xF0001 //参数错误
17+
#define ERROR_MODULE_SYSTEM_API_SYSENABLE 0xF0002 //自动启动服务启用失败
18+
#define ERROR_MODULE_SYSTEM_API_SYSDISABLE 0xF0003 //禁用自动启动服务失败
19+
#define ERROR_MODULE_SYSTEM_API_GETFILENAME 0xF0004 //获取自身文件名失败
20+
#define ERROR_MODULE_SYSTEM_API_COINIT 0xF0005 //打开OLD失败
21+
#define ERROR_MODULE_SYSTEM_API_QUERY 0xF0006 //查询接口失败
17.8 KB
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)