Skip to content

Commit 480a6b2

Browse files
committed
added:user info memory cache supported
1 parent 8929157 commit 480a6b2

14 files changed

Lines changed: 480 additions & 10 deletions

File tree

.github/workflows/msbuild.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ jobs:
7474
./VSCopy_x86.bat
7575
./XEngine_MQServiceApp.exe -t
7676
shell: pwsh
77-
- name: Conditional Step for x86 Debug
77+
- name: Conditional Step for x64 Release
7878
if: matrix.configuration == 'Release' && matrix.platform == 'x64'
7979
run: |
8080
cp -r XEngine_Source/x64/Release/*.dll XEngine_Release/

XEngine_Release/XEngine_Config/XEngine_Config.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"LogLeave":17
2323
},
2424
"XSql":{
25-
"SQLAddr":"10.0.3.154",
25+
"SQLAddr":"10.0.2.6",
2626
"SQLPort":3306,
2727
"SQLUser":"root",
2828
"SQLPass":"123123aa"
@@ -37,6 +37,7 @@
3737
"XMemory":{
3838
"bDataQueryEnable":true,
3939
"bDataInsertEnable":true,
40+
"bUserQueryEnable":true,
4041
"nTimeLast":3600,
4142
"nTimeStart":0
4243
},

XEngine_Source/MQCore_ConfigModule/Config_Define.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ typedef struct
5959
{
6060
bool bDataQueryEnable;
6161
bool bDataInsertEnable;
62+
bool bUserQueryEnable;
6263
int nTimeLast;
6364
int nTimeStart;
6465
}st_XMemory;

XEngine_Source/MQCore_ConfigModule/Config_Json/Config_Json.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ bool CConfig_Json::Config_Json_File(LPCXSTR lpszConfigFile,XENGINE_SERVERCONFIG
123123
_tcsxcpy(pSt_ServerConfig->st_XPass.tszPassRegister, st_JsonXPass["tszPassRegister"].asCString());
124124
_tcsxcpy(pSt_ServerConfig->st_XPass.tszPassUNReg, st_JsonXPass["tszPassUNReg"].asCString());
125125

126-
if (st_JsonRoot["XMemory"].empty() || (4 != st_JsonRoot["XMemory"].size()))
126+
if (st_JsonRoot["XMemory"].empty() || (5 != st_JsonRoot["XMemory"].size()))
127127
{
128128
Config_IsErrorOccur = true;
129129
Config_dwErrorCode = ERROR_MQ_MODULE_CONFIG_JSON_XMEMORY;
@@ -132,6 +132,7 @@ bool CConfig_Json::Config_Json_File(LPCXSTR lpszConfigFile,XENGINE_SERVERCONFIG
132132
Json::Value st_JsonXMemory = st_JsonRoot["XMemory"];
133133
pSt_ServerConfig->st_XMemory.bDataQueryEnable = st_JsonXMemory["bDataQueryEnable"].asBool();
134134
pSt_ServerConfig->st_XMemory.bDataInsertEnable = st_JsonXMemory["bDataInsertEnable"].asBool();
135+
pSt_ServerConfig->st_XMemory.bUserQueryEnable = st_JsonXMemory["bUserQueryEnable"].asBool();
135136
pSt_ServerConfig->st_XMemory.nTimeLast = st_JsonXMemory["nTimeLast"].asInt();
136137
pSt_ServerConfig->st_XMemory.nTimeStart = st_JsonXMemory["nTimeStart"].asInt();
137138

XEngine_Source/MQCore_MemoryCache/MQCore_MemoryCache.def

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,11 @@ EXPORTS
99
MemoryCache_DBData_DataInsert
1010
MemoryCache_DBData_DataQuery
1111
MemoryCache_DBData_DataDelete
12-
MemoryCache_DBData_QueueInsert
12+
MemoryCache_DBData_QueueInsert
13+
14+
MemoryCache_DBUser_Init
15+
MemoryCache_DBUser_SetHandle
16+
MemoryCache_DBUser_Destory
17+
MemoryCache_DBUser_DataInsert
18+
MemoryCache_DBUser_DataQuery
19+
MemoryCache_DBUser_DataDelete

XEngine_Source/MQCore_MemoryCache/MQCore_MemoryCache.vcxproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,13 +172,15 @@
172172
<ItemGroup>
173173
<ClInclude Include="framework.h" />
174174
<ClInclude Include="MemoryCache_DBData\MemoryCache_DBData.h" />
175+
<ClInclude Include="MemoryCache_DBUser\MemoryCache_DBUser.h" />
175176
<ClInclude Include="MemoryCache_Define.h" />
176177
<ClInclude Include="MemoryCache_Error.h" />
177178
<ClInclude Include="pch.h" />
178179
</ItemGroup>
179180
<ItemGroup>
180181
<ClCompile Include="dllmain.cpp" />
181182
<ClCompile Include="MemoryCache_DBData\MemoryCache_DBData.cpp" />
183+
<ClCompile Include="MemoryCache_DBUser\MemoryCache_DBUser.cpp" />
182184
<ClCompile Include="pch.cpp">
183185
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
184186
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>

XEngine_Source/MQCore_MemoryCache/MQCore_MemoryCache.vcxproj.filters

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@
1919
<Filter Include="源文件\MemoryCache_DBData">
2020
<UniqueIdentifier>{d3182e9a-8f45-4138-b4e2-a793c976d18d}</UniqueIdentifier>
2121
</Filter>
22+
<Filter Include="头文件\MemoryCache_DBUser">
23+
<UniqueIdentifier>{b3468e30-1493-4bfe-88a0-7752163b8820}</UniqueIdentifier>
24+
</Filter>
25+
<Filter Include="源文件\MemoryCache_DBUser">
26+
<UniqueIdentifier>{9e8d921c-e3ab-4610-a4e9-040dc71a57b4}</UniqueIdentifier>
27+
</Filter>
2228
</ItemGroup>
2329
<ItemGroup>
2430
<ClInclude Include="framework.h">
@@ -36,6 +42,9 @@
3642
<ClInclude Include="MemoryCache_DBData\MemoryCache_DBData.h">
3743
<Filter>头文件\MemoryCache_DBData</Filter>
3844
</ClInclude>
45+
<ClInclude Include="MemoryCache_DBUser\MemoryCache_DBUser.h">
46+
<Filter>头文件\MemoryCache_DBUser</Filter>
47+
</ClInclude>
3948
</ItemGroup>
4049
<ItemGroup>
4150
<ClCompile Include="dllmain.cpp">
@@ -47,6 +56,9 @@
4756
<ClCompile Include="MemoryCache_DBData\MemoryCache_DBData.cpp">
4857
<Filter>源文件\MemoryCache_DBData</Filter>
4958
</ClCompile>
59+
<ClCompile Include="MemoryCache_DBUser\MemoryCache_DBUser.cpp">
60+
<Filter>源文件\MemoryCache_DBUser</Filter>
61+
</ClCompile>
5062
</ItemGroup>
5163
<ItemGroup>
5264
<None Include="MQCore_MemoryCache.def">

XEngine_Source/MQCore_MemoryCache/Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ LOADHDR = -I ./
99
LOADSO =
1010
LIB = -lHelpComponents_DataBase
1111
LIBEX =
12-
OBJECTS = MemoryCache_DBData.o pch.o
12+
OBJECTS = MemoryCache_DBData.o MemoryCache_DBUser.o pch.o
1313

1414
ifeq ($(RELEASE),1)
1515
FLAGS = -c
@@ -52,6 +52,8 @@ all:$(OBJECTS)
5252

5353
MemoryCache_DBData.o:./MemoryCache_DBData/MemoryCache_DBData.cpp
5454
$(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./MemoryCache_DBData/MemoryCache_DBData.cpp
55+
MemoryCache_DBUser.o:./MemoryCache_DBUser/MemoryCache_DBUser.cpp
56+
$(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./MemoryCache_DBUser/MemoryCache_DBUser.cpp
5557

5658
pch.o:./pch.cpp
5759
$(CC) $(DEBUG) $(FLAGS) $(PLATVER) $(LOADHDR) ./pch.cpp
Lines changed: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
#include "pch.h"
2+
#include "MemoryCache_DBUser.h"
3+
/********************************************************************
4+
// Created: 2025/01/17 10:09:09
5+
// File Name: D:\XEngine_MQService\XEngine_Source\MQCore_MemoryCache\MemoryCache_DBUser\MemoryCache_DBUser.cpp
6+
// File Path: D:\XEngine_MQService\XEngine_Source\MQCore_MemoryCache\MemoryCache_DBUser
7+
// File Base: MemoryCache_DBUser
8+
// File Ext: cpp
9+
// Project: XEngine(网络通信引擎)
10+
// Author: qyt
11+
// Purpose: 数据库高速缓存
12+
// History:
13+
*********************************************************************/
14+
CMemoryCache_DBUser::CMemoryCache_DBUser()
15+
{
16+
}
17+
CMemoryCache_DBUser::~CMemoryCache_DBUser()
18+
{
19+
20+
}
21+
//////////////////////////////////////////////////////////////////////////
22+
// 公有函数
23+
//////////////////////////////////////////////////////////////////////////
24+
/********************************************************************
25+
函数名称:MemoryCache_DBUser_Init
26+
函数功能:初始化高速缓存管理器
27+
参数.一:nTimeLast
28+
In/Out:In
29+
类型:整数型
30+
可空:N
31+
意思:允许的最后更新时间存在秒数
32+
参数.二:nTimeStart
33+
In/Out:In
34+
类型:整数型
35+
可空:N
36+
意思:允许的最大保留时间
37+
返回值
38+
类型:逻辑型
39+
意思:是否成功
40+
备注:
41+
*********************************************************************/
42+
bool CMemoryCache_DBUser::MemoryCache_DBUser_Init(int nTimeLast, int nTimeStart, CALLBACK_MESSAGEQUEUE_MODULE_DATABASE_CACHE fpCall_MemoryCache, XPVOID lParam /* = NULL */)
43+
{
44+
MemoryCache_IsErrorOccur = false;
45+
46+
bIsRun = true;
47+
48+
m_nTimeLast = nTimeLast;
49+
m_nTimeStart = nTimeStart;
50+
m_lParam = lParam;
51+
lpCall_MemoryCache = fpCall_MemoryCache;
52+
53+
pSTDThread_Query = std::make_unique<std::thread>(DBModule_MQUser_TimeThread, this);
54+
if (NULL == pSTDThread_Query)
55+
{
56+
MemoryCache_IsErrorOccur = true;
57+
MemoryCache_dwErrorCode = ERROR_XENGINE_MQCORE_MEMORYCACHE_DBDATA_THREAD;
58+
return false;
59+
}
60+
return true;
61+
}
62+
/********************************************************************
63+
函数名称:MemoryCache_DBUser_SetHandle
64+
函数功能:设置句柄
65+
参数.一:xhDBSQL
66+
In/Out:In
67+
类型:句柄
68+
可空:N
69+
意思:数据库句柄
70+
返回值
71+
类型:逻辑型
72+
意思:是否成功
73+
备注:
74+
*********************************************************************/
75+
bool CMemoryCache_DBUser::MemoryCache_DBUser_SetHandle(XNETHANDLE xhDBSQL)
76+
{
77+
MemoryCache_IsErrorOccur = false;
78+
79+
m_xhDBSQL = xhDBSQL;
80+
81+
return true;
82+
}
83+
/********************************************************************
84+
函数名称:MemoryCache_DBUser_Destory
85+
函数功能:销毁高速缓存管理器
86+
返回值
87+
类型:逻辑型
88+
意思:是否成功
89+
备注:
90+
*********************************************************************/
91+
bool CMemoryCache_DBUser::MemoryCache_DBUser_Destory()
92+
{
93+
MemoryCache_IsErrorOccur = false;
94+
95+
bIsRun = false;
96+
if (NULL != pSTDThread_Query)
97+
{
98+
pSTDThread_Query->join();
99+
}
100+
return true;
101+
}
102+
/********************************************************************
103+
函数名称:MemoryCache_DBUser_DataInsert
104+
函数功能:插入一条数据到高速缓存
105+
参数.一:pSt_DBUserInfo
106+
In/Out:In
107+
类型:数据结构指针
108+
可空:N
109+
意思:输入要插入的信息
110+
返回值
111+
类型:逻辑型
112+
意思:是否成功
113+
备注:
114+
*********************************************************************/
115+
bool CMemoryCache_DBUser::MemoryCache_DBUser_DataInsert(XENGINE_PROTOCOL_USERINFO* pSt_DBUserInfo)
116+
{
117+
MemoryCache_IsErrorOccur = false;
118+
119+
if (NULL == pSt_DBUserInfo)
120+
{
121+
MemoryCache_IsErrorOccur = true;
122+
MemoryCache_dwErrorCode = ERROR_XENGINE_MQCORE_MEMORYCACHE_DBDATA_PARAMENT;
123+
return false;
124+
}
125+
126+
st_LockerQuery.lock();
127+
auto stl_MapIterator = stl_MapQuery.find(pSt_DBUserInfo->tszUserName);
128+
if (stl_MapIterator == stl_MapQuery.end())
129+
{
130+
MEMORYCACHE_DBUSER st_DBInfo = {};
131+
132+
st_DBInfo.nTimeStart = time(NULL);
133+
st_DBInfo.st_DBUserInfo = *pSt_DBUserInfo;
134+
stl_MapQuery[pSt_DBUserInfo->tszUserName] = st_DBInfo;
135+
}
136+
else
137+
{
138+
stl_MapIterator->second.st_DBUserInfo = *pSt_DBUserInfo;
139+
}
140+
st_LockerQuery.unlock();
141+
return true;
142+
}
143+
/********************************************************************
144+
函数名称:MemoryCache_DBUser_DataQuery
145+
函数功能:查询高速缓存
146+
参数.一:pSt_DBUserInfo
147+
In/Out:In
148+
类型:数据结构指针
149+
可空:N
150+
意思:输入要查询的信息
151+
返回值
152+
类型:逻辑型
153+
意思:是否成功
154+
备注:
155+
*********************************************************************/
156+
bool CMemoryCache_DBUser::MemoryCache_DBUser_DataQuery(XENGINE_PROTOCOL_USERINFO* pSt_DBUserInfo)
157+
{
158+
MemoryCache_IsErrorOccur = false;
159+
160+
if (NULL == pSt_DBUserInfo)
161+
{
162+
MemoryCache_IsErrorOccur = true;
163+
MemoryCache_dwErrorCode = ERROR_XENGINE_MQCORE_MEMORYCACHE_DBDATA_PARAMENT;
164+
return false;
165+
}
166+
167+
st_LockerQuery.lock_shared();
168+
auto stl_MapIterator = stl_MapQuery.find(pSt_DBUserInfo->tszUserName);
169+
if (stl_MapIterator == stl_MapQuery.end())
170+
{
171+
MemoryCache_IsErrorOccur = true;
172+
MemoryCache_dwErrorCode = ERROR_XENGINE_MQCORE_MEMORYCACHE_DBDATA_NOTFOUND;
173+
st_LockerQuery.unlock_shared();
174+
return false;
175+
}
176+
stl_MapIterator->second.nTimeLast = time(NULL);
177+
*pSt_DBUserInfo = stl_MapIterator->second.st_DBUserInfo;
178+
st_LockerQuery.unlock_shared();
179+
return true;
180+
}
181+
/********************************************************************
182+
函数名称:MemoryCache_DBUser_DataDelete
183+
函数功能:删除高速缓存
184+
参数.一:pSt_DBUserInfo
185+
In/Out:In
186+
类型:数据结构指针
187+
可空:N
188+
意思:输入要操作的信息
189+
返回值
190+
类型:逻辑型
191+
意思:是否成功
192+
备注:
193+
*********************************************************************/
194+
bool CMemoryCache_DBUser::MemoryCache_DBUser_DataDelete(XENGINE_PROTOCOL_USERINFO* pSt_DBUserInfo)
195+
{
196+
MemoryCache_IsErrorOccur = false;
197+
198+
if (NULL == pSt_DBUserInfo)
199+
{
200+
MemoryCache_IsErrorOccur = true;
201+
MemoryCache_dwErrorCode = ERROR_XENGINE_MQCORE_MEMORYCACHE_DBDATA_PARAMENT;
202+
return false;
203+
}
204+
205+
st_LockerQuery.lock();
206+
auto stl_MapIterator = stl_MapQuery.find(pSt_DBUserInfo->tszUserName);
207+
if (stl_MapIterator != stl_MapQuery.end())
208+
{
209+
stl_MapQuery.erase(stl_MapIterator);
210+
}
211+
st_LockerQuery.unlock();
212+
return true;
213+
}
214+
//////////////////////////////////////////////////////////////////////////
215+
// 线程函数
216+
//////////////////////////////////////////////////////////////////////////
217+
XHTHREAD CALLBACK CMemoryCache_DBUser::DBModule_MQUser_TimeThread(XPVOID lParam)
218+
{
219+
CMemoryCache_DBUser* pClass_This = (CMemoryCache_DBUser*)lParam;
220+
221+
std::list<XENGINE_PROTOCOL_USERINFO> stl_ListDelete;
222+
while (pClass_This->bIsRun)
223+
{
224+
time_t nTimeEnd = time(NULL);
225+
pClass_This->st_LockerQuery.lock_shared();
226+
for (auto stl_MapIterator = pClass_This->stl_MapQuery.begin(); stl_MapIterator != pClass_This->stl_MapQuery.end(); stl_MapIterator++)
227+
{
228+
if (stl_MapIterator->second.nTimeLast > (nTimeEnd - pClass_This->m_nTimeLast))
229+
{
230+
stl_ListDelete.push_back(stl_MapIterator->second.st_DBUserInfo);
231+
}
232+
else if (pClass_This->m_nTimeStart > 0 && (nTimeEnd - pClass_This->m_nTimeStart))
233+
{
234+
stl_ListDelete.push_back(stl_MapIterator->second.st_DBUserInfo);
235+
}
236+
}
237+
pClass_This->st_LockerQuery.unlock_shared();
238+
239+
for (auto stl_ListIterator = stl_ListDelete.begin(); stl_ListIterator != stl_ListDelete.end(); stl_ListIterator++)
240+
{
241+
XENGINE_PROTOCOL_USERINFO st_DBUser = *stl_ListIterator;
242+
if (pClass_This->MemoryCache_DBUser_DataDelete(&st_DBUser))
243+
{
244+
pClass_This->lpCall_MemoryCache(ENUM_MEMORYCACHE_CALLBACK_TYPE_USER_QUERY, true, pClass_This->stl_MapQuery.size(), (XPVOID)&st_DBUser, pClass_This->m_lParam);
245+
}
246+
else
247+
{
248+
pClass_This->lpCall_MemoryCache(ENUM_MEMORYCACHE_CALLBACK_TYPE_USER_QUERY, false, pClass_This->stl_MapQuery.size(), (XPVOID)&st_DBUser, pClass_This->m_lParam);
249+
}
250+
}
251+
std::this_thread::sleep_for(std::chrono::seconds(1));
252+
}
253+
return 0;
254+
}

0 commit comments

Comments
 (0)