diff --git a/README.en.md b/README.en.md
index 7927f2490cea5fb400686687041664f516451ba5..45fb02603a1a3044a1a62a8590cd28cbc3bc6aee 100644
--- a/README.en.md
+++ b/README.en.md
@@ -27,30 +27,26 @@ feature list:
#### Requirements
support system above windows 7sp1 and linux(ubuntu20.04,centos8)
-XEngine need V7.17 or above
+you must install XEngine,need V7.28 or above
#### Windows
Just Run it.,use XEngine_AuthorizeApp
-
#### Linux
Run it on the terminal,use XEngine_AuthorizeService
## complie
+install XEngine can be refer to xengine Readme docment
+GITEE:https://gitee.com/xyry/libxengine
+GITHUB:https://github.com/libxengine/xengine
#### Windows
-use vs2019 x86(debug or release) x64(only release) open and complie
-You need to configure the environment in the following way, otherwise you may need to set the library directory in the project yourself
+use vs2019 x86(debug or release) x64(only release) open and complie
#### Linux
Linux use Makefile complie
UBUNTU20.04 x64 or CENTOS8 x64
-#### XEngine Env
-install XEngine can be refer to xengine Readme docment
-GITEE:https://gitee.com/xyry/libxengine
-GITHUB:https://github.com/libxengine/xengine
-
##### Screenshot of the program
execute command in XEngine_Source path
make complie
@@ -58,7 +54,7 @@ make FLAGS=InstallAll Install File
make FLAGS=CleanAll Clear Complie
## test server
-address:app.xyry.org or 159.75.200.173
+address:app.xyry.org or 159.75.200.173
port :tcp port 5300,websocket port 5301,Transmission verification password: no encryption
## Screenshot of the program
diff --git a/README.md b/README.md
index 0b87b4a3bd6f96a771fc618aa30b6278671ca844..00af1fab4ffa73b4cd5ae59a888d830757f36f85 100644
--- a/README.md
+++ b/README.md
@@ -27,40 +27,34 @@ c c++network Authorize service
#### 版本需求
支持WINDOWS 7SP1和LINUX(UBUNT20.04,CENTOS8)以上系统
-XEngine版本需要V7.23或者以上版本
+必须安装XEngine,版本需要V7.28或者以上版本
#### Windows
直接运行即可,使用XEngine_AuthorizeApp
-
#### Linux
在控制台运行,使用XEngine_AuthorizeService
## 编译
+安装XEngine可以参考其Readme文档
+GITEE:https://gitee.com/xyry/libxengine
+GITHUB:https://github.com/libxengine/xengine
#### Windows
-使用VS2019 x86(debug release)或者x64(release)打开并且编译 你需要按照下面的方式配置环境,不然你可能需要自己在项目中设置库目录
+使用VS2019 x86(debug release)或者x64(release)打开并且编译
#### Linux
Linux使用Makefile编译
UBUNTU20.04 x64或者CENTOS8 x64均可
-##### XEngine环境
-XEngine可以通过脚本文件安装sudo XEngine_RunEnv.sh -i 3
-
##### 编译命令
在XEngine_Source目录下执行命令
make 编译
make FLAGS=InstallAll 安装库程序
make FLAGS=CleanAll 清理编译
-#### XEngine环境
-安装XEngine可以参考其Readme文档
-GITEE:https://gitee.com/xyry/libxengine
-GITHUB:https://github.com/libxengine/xengine
-
## 测试服务器
-地址:app.xyry.org 或者 159.75.200.173
+地址:app.xyry.org 或者 159.75.200.173
端口:tcp端口 5300,websocket端口 5301,传输验证密码:无加密
## 程序截图
diff --git a/XEngine_Apps/README.md b/XEngine_Apps/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..63f8fcb841fc5e660d2112cf5d1579bdc0b79d37
--- /dev/null
+++ b/XEngine_Apps/README.md
@@ -0,0 +1 @@
+appclient just only x86 debug compile
\ No newline at end of file
diff --git a/XEngine_Apps/VSClean.bat b/XEngine_Apps/VSClean.bat
new file mode 100644
index 0000000000000000000000000000000000000000..bf8eca312f152fb046525e2cb0588095fec84b08
--- /dev/null
+++ b/XEngine_Apps/VSClean.bat
@@ -0,0 +1,10 @@
+@echo Off
+del /s /a *.ncb *.so *.o *.db
+FOR /R . %%d IN (.) DO rd /s /q "%%d\Debug" 2>nul
+FOR /R . %%d IN (.) DO rd /s /q "%%d\Release" 2>nul
+FOR /R . %%d IN (.) DO rd /s /q "%%d\x64" 2>nul
+FOR /R . %%d IN (.) DO rd /s /q "%%d\Debug" 2>nul
+FOR /R . %%d IN (.) DO rd /s /q "%%d\ipch" 2>nul
+
+rem If the Properties directory is empty, remove it
+FOR /R . %%d in (.) do rd /q "%%d\Properties" 2> nul
diff --git a/XEngine_Release/XEngine_Config/XEngine_Config.ini b/XEngine_Release/XEngine_Config/XEngine_Config.ini
index 058e1dfcb4bf4865e85eaa6c6c5c236daca65df2..fb71056c807bfe52884dcba30f50602f54e3b9eb 100644
--- a/XEngine_Release/XEngine_Config/XEngine_Config.ini
+++ b/XEngine_Release/XEngine_Config/XEngine_Config.ini
@@ -1,12 +1,12 @@
[ServiceConfig]
-TCPPort=5500
-WSPort=5501
+TCPPort=5300
+WSPort=5301
ThreadPool=2
UserVerTimed=30
AutoStart=0
TimeNotify=1
[XSql]
-tszSQLite=./XEngine_Database/SQL_User.db
+tszSQLite=./XEngine_DataBase/SQL_User.db
[Verification]
VerTime=5
VerMode=1
diff --git a/XEngine_Source/AuthorizeModule_Configure/AuthorizeModule_Configure.vcxproj b/XEngine_Source/AuthorizeModule_Configure/AuthorizeModule_Configure.vcxproj
index c2a4e14b7ac0a093b9a67452a0229fd9cf71f47e..22d3a11950735d13ad804d04284c12df2abad70c 100644
--- a/XEngine_Source/AuthorizeModule_Configure/AuthorizeModule_Configure.vcxproj
+++ b/XEngine_Source/AuthorizeModule_Configure/AuthorizeModule_Configure.vcxproj
@@ -43,7 +43,7 @@
DynamicLibrary
true
v142
- Unicode
+ MultiByte
DynamicLibrary
@@ -82,6 +82,8 @@
true
+ $(XEngine_Include);$(IncludePath)
+ $(XEngine_Lib64);$(LibraryPath)
false
@@ -129,7 +131,7 @@
Level3
true
- _DEBUG;AUTHORIZEMODULECONFIGURE_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ _DEBUG;AUTHORIZEMODULECONFIGURE_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
true
Use
pch.h
diff --git a/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.vcxproj b/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.vcxproj
index 65849d4a9f623623a5117177d548615cc5b18bfc..a2c917fab3c5346ba990b80632449c72896a9861 100644
--- a/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.vcxproj
+++ b/XEngine_Source/AuthorizeModule_Protocol/AuthorizeModule_Protocol.vcxproj
@@ -43,7 +43,7 @@
DynamicLibrary
true
v142
- Unicode
+ MultiByte
DynamicLibrary
@@ -72,7 +72,7 @@
true
- $(XEngine_Include);$(IncludePath)
+ $(XEngine_Include);../XEngine_ThirdPart/jsoncpp;$(IncludePath)
false
@@ -80,11 +80,15 @@
true
+ $(XEngine_Include);$(IncludePath)
false
$(XEngine_Include);$(IncludePath)
+
+ false
+
Level3
@@ -128,7 +132,7 @@
Level3
true
- _DEBUG;AUTHORIZEMODULEPROTOCOL_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ _DEBUG;AUTHORIZEMODULEPROTOCOL_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
true
Use
pch.h
diff --git a/XEngine_Source/AuthorizeModule_Protocol/pch.h b/XEngine_Source/AuthorizeModule_Protocol/pch.h
index fab1874a7480f024a11788d7293438a59338f092..b005b199f004cd23460b2486867522b18255e86d 100644
--- a/XEngine_Source/AuthorizeModule_Protocol/pch.h
+++ b/XEngine_Source/AuthorizeModule_Protocol/pch.h
@@ -45,4 +45,20 @@
// History:
*********************************************************************/
extern BOOL Protocol_IsErrorOccur;
-extern DWORD Protocol_dwErrorCode;
\ No newline at end of file
+extern DWORD Protocol_dwErrorCode;
+
+#ifdef _WINDOWS
+#ifdef _DEBUG
+#ifdef _WIN64
+#pragma comment(lib,"../x64/Debug/jsoncpp")
+#else
+#pragma comment(lib,"../Debug/jsoncpp")
+#endif
+#else
+#ifdef _WIN64
+#pragma comment(lib,"../x64/Release/jsoncpp")
+#else
+#pragma comment(lib,"../Release/jsoncpp")
+#endif
+#endif
+#endif
\ No newline at end of file
diff --git a/XEngine_Source/VSCopy_x64.bat b/XEngine_Source/VSCopy_x64.bat
new file mode 100644
index 0000000000000000000000000000000000000000..8f9135a2d687efc02e637a32c2187a1c9749918c
--- /dev/null
+++ b/XEngine_Source/VSCopy_x64.bat
@@ -0,0 +1,24 @@
+copy /y "%XEngine_Library%\x64\XEngine_BaseLib\XEngine_BaseLib.dll" "./"
+copy /y "%XEngine_Library%\x64\XEngine_BaseLib\XEngine_Algorithm.dll" "./"
+copy /y "%XEngine_Library%\x64\XEngine_Core\XEngine_Core.dll" "./"
+copy /y "%XEngine_Library%\x64\XEngine_Core\XEngine_ManagePool.dll" "./"
+copy /y "%XEngine_Library%\x64\XEngine_Core\XEngine_OPenSsl.dll" "./"
+
+copy /y "%XEngine_Library%\x64\XEngine_HelpComponents\HelpComponents_DataBase.dll" "./"
+copy /y "%XEngine_Library%\x64\XEngine_HelpComponents\HelpComponents_Packets.dll" "./"
+copy /y "%XEngine_Library%\x64\XEngine_HelpComponents\HelpComponents_XLog.dll" "./"
+copy /y "%XEngine_Library%\x64\XEngine_HelpComponents\HelpComponents_Authorize.dll" "./"
+
+copy /y "%XEngine_Library%\x64\XEngine_SystemSdk\XEngine_SystemApi.dll" "./"
+copy /y "%XEngine_Library%\x64\XEngine_RfcComponents\RfcComponents_WSProtocol.dll" "./"
+copy /y "%XEngine_Library%\x64\XEngine_RfcComponents\RfcComponents_EmailClient.dll" "./"
+
+copy /y "%XEngine_Library%\x64\XEngine_HelpComponents\bson-1.0.dll" "./"
+copy /y "%XEngine_Library%\x64\XEngine_HelpComponents\mongoc-1.0.dll" "./"
+copy /y "%XEngine_Library%\x64\XEngine_HelpComponents\libmariadb.dll" "./"
+copy /y "%XEngine_Library%\x64\XEngine_HelpComponents\libpq.dll" "./"
+copy /y "%XEngine_Library%\x64\XEngine_HelpComponents\sqlite3.dll" "./"
+copy /y "%XEngine_Library%\x64\XEngine_HelpComponents\zlib1.dll" "./"
+copy /y "%XEngine_Library%\x64\XEngine_LibEx\libcrypto-1_1.dll" "./"
+copy /y "%XEngine_Library%\x64\XEngine_LibEx\libssl-1_1.dll" "./"
+copy /y "%XEngine_Library%\x64\XEngine_LibEx\libcurl.dll" "./"
\ No newline at end of file
diff --git a/XEngine_Source/VSCopy.bat b/XEngine_Source/VSCopy_x86.bat
similarity index 100%
rename from XEngine_Source/VSCopy.bat
rename to XEngine_Source/VSCopy_x86.bat
diff --git a/XEngine_Source/XAuth_Protocol.h b/XEngine_Source/XAuth_Protocol.h
index cbe459aa00c2bb0112533c2e8ca98aa8c61381a1..2df7266583d24171935cf8c2cd2e0927897fefe7 100644
--- a/XEngine_Source/XAuth_Protocol.h
+++ b/XEngine_Source/XAuth_Protocol.h
@@ -12,6 +12,29 @@
*********************************************************************/
#define XENGINE_AUTHREG_SERVICE_SQL_MAX_USERNAME 32
//////////////////////////////////////////////////////////////////////////
+// Э鶨
+//////////////////////////////////////////////////////////////////////////
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REQDEL 0x2001 //ɾû
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REPDEL 0x2002
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REQREGISTER 0x2003 //ע
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REPREGISTER 0x2004
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REQLOGIN 0x2005 //½
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REPLOGIN 0x2006
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REQPAY 0x2007 //ֵ
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REPPAY 0x2008
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REQGETPASS 0x2009 //һ
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REPGETPASS 0x200A
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REQGETTIME 0x200B //ȡʣʱ
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REPGETTIME 0x200C
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REQTRYVER 0x200D //ʱ֤Э
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REPTRYVER 0x200E
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REQGETUSER 0x2010 //ȡûϢЭ
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REPGETUSER 0x2011
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REQSETUSER 0x2012 //ûϢЭ
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_REPSETUSER 0x2013
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_NOTIFYMSG 0x2FF0 //
+#define XENGINE_COMMUNICATION_PROTOCOL_OPERATOR_CODE_AUTH_TIMEDOUT 0x2FFF //֪ͨͻʱ䵽
+//////////////////////////////////////////////////////////////////////////
// ݽṹ
//////////////////////////////////////////////////////////////////////////
//ֵЭ
diff --git a/XEngine_Source/XEngine.sln b/XEngine_Source/XEngine.sln
index 4a524349b898ce89aaa052ae1174b0fbabbab7f8..e50f0bd2873076c24e597d3d58cada05e5c14f10 100644
--- a/XEngine_Source/XEngine.sln
+++ b/XEngine_Source/XEngine.sln
@@ -24,6 +24,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_AuthorizeService",
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XEngine_AuthorizeApp", "XEngine_APPService\XEngine_AuthorizeApp\XEngine_AuthorizeApp.vcxproj", "{29DCAD3F-A70D-424A-BB5A-E99DAE9EEF16}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "XEngine_ThirdPart", "XEngine_ThirdPart", "{756EEE5A-D9AE-4857-8F44-C7918F3611A5}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jsoncpp", "XEngine_ThirdPart\jsoncpp\jsoncpp.vcxproj", "{F1736B3F-03A2-4FC7-B045-A12BA8D724FB}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
@@ -80,6 +84,14 @@ Global
{29DCAD3F-A70D-424A-BB5A-E99DAE9EEF16}.Release|x64.Build.0 = Release|x64
{29DCAD3F-A70D-424A-BB5A-E99DAE9EEF16}.Release|x86.ActiveCfg = Release|Win32
{29DCAD3F-A70D-424A-BB5A-E99DAE9EEF16}.Release|x86.Build.0 = Release|Win32
+ {F1736B3F-03A2-4FC7-B045-A12BA8D724FB}.Debug|x64.ActiveCfg = Debug|x64
+ {F1736B3F-03A2-4FC7-B045-A12BA8D724FB}.Debug|x64.Build.0 = Debug|x64
+ {F1736B3F-03A2-4FC7-B045-A12BA8D724FB}.Debug|x86.ActiveCfg = Debug|Win32
+ {F1736B3F-03A2-4FC7-B045-A12BA8D724FB}.Debug|x86.Build.0 = Debug|Win32
+ {F1736B3F-03A2-4FC7-B045-A12BA8D724FB}.Release|x64.ActiveCfg = Release|x64
+ {F1736B3F-03A2-4FC7-B045-A12BA8D724FB}.Release|x64.Build.0 = Release|x64
+ {F1736B3F-03A2-4FC7-B045-A12BA8D724FB}.Release|x86.ActiveCfg = Release|Win32
+ {F1736B3F-03A2-4FC7-B045-A12BA8D724FB}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -89,6 +101,7 @@ Global
{65CB84F8-8DAB-483D-A3C6-AD48FC7ACAEF} = {F79B8560-7E00-4930-A61B-83BE6FB52599}
{A29DFD8D-2818-4BE3-A2DB-07F241B4BFC9} = {2444CB54-6443-47F9-8D93-91237D0D05FB}
{29DCAD3F-A70D-424A-BB5A-E99DAE9EEF16} = {2444CB54-6443-47F9-8D93-91237D0D05FB}
+ {F1736B3F-03A2-4FC7-B045-A12BA8D724FB} = {756EEE5A-D9AE-4857-8F44-C7918F3611A5}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {E1F1DDE3-8949-41AF-84D6-03CB7CAA03AB}
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps
index dd15fa841f4e39cfaf1da01575405fa74405c509..a26770650c342219d6738a9392b9119bb633ab1e 100644
Binary files a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps and b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.aps differ
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc
index 7c60c03f1991032547a806ea144975aa25ddbaf7..883b336f5d2245d65dd68846ed79918db0237678 100644
Binary files a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc and b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngineAuthorizeApp.rc differ
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj
index 71e553afbf4c7ae745bb381294978d0083da19b2..a19ea9320b6c0eaea57d6d02f2b7dd1b40dcc7cf 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/XEngine_AuthorizeApp.vcxproj
@@ -45,7 +45,7 @@
Application
true
v142
- Unicode
+ MultiByte
Dynamic
@@ -81,6 +81,8 @@
true
+ $(XEngine_Include);$(IncludePath)
+ $(XEngine_Lib64);$(LibraryPath)
false
@@ -120,7 +122,7 @@
Use
Level3
true
- _WINDOWS;_DEBUG;%(PreprocessorDefinitions)
+ _WINDOWS;_DEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
pch.h
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.h
index f50a42c2b5fc36af15df880d5bc5155852929a80..88bec8c77c83f06c4e7bb8ebbe242ab10557a6a4 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.h
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeApp/pch.h
@@ -80,10 +80,17 @@ typedef struct
}XENGINE_THREADINFO;
#ifdef _DEBUG
+#ifdef _WIN64
+#pragma comment(lib,"../../x64/Debug/AuthComponents_SQLPacket")
+#pragma comment(lib,"../../x64/Debug/AuthComponents_Session")
+#pragma comment(lib,"../../x64/Debug/AuthorizeModule_Configure")
+#pragma comment(lib,"../../x64/Debug/AuthorizeModule_Protocol")
+#else
#pragma comment(lib,"../../Debug/AuthComponents_SQLPacket")
#pragma comment(lib,"../../Debug/AuthComponents_Session")
#pragma comment(lib,"../../Debug/AuthorizeModule_Configure")
#pragma comment(lib,"../../Debug/AuthorizeModule_Protocol")
+#endif
#else
#ifdef _WIN64
#pragma comment(lib,"../../x64/Release/AuthorizeModule_Configure.lib")
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h
index f1245da20173decdd4ac468f04c14676b0026280..8a96d9d30f393e957697da21112f7bb0d2f5f74a 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/Authorize_Hdr.h
@@ -68,10 +68,17 @@ extern AUTHORIZE_CONFIGURE st_AuthConfig;
#ifdef _WINDOWS
#ifdef _DEBUG
+#ifdef _WIN64
+#pragma comment(lib,"../../x64/Debug/AuthorizeModule_Configure.lib")
+#pragma comment(lib,"../../x64/Debug/AuthorizeModule_Protocol.lib")
+#pragma comment(lib,"../../x64/Debug/AuthComponents_Session.lib")
+#pragma comment(lib,"../../x64/Debug/AuthComponents_SQLPacket.lib")
+#else
#pragma comment(lib,"../../Debug/AuthorizeModule_Configure.lib")
#pragma comment(lib,"../../Debug/AuthorizeModule_Protocol.lib")
#pragma comment(lib,"../../Debug/AuthComponents_Session.lib")
#pragma comment(lib,"../../Debug/AuthComponents_SQLPacket.lib")
+#endif
#else
#ifdef _WIN64
#pragma comment(lib,"../../x64/Release/AuthorizeModule_Configure.lib")
diff --git a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj
index 89f411b5a0fb1ebd6b1c89cdf087aaf84ea9ce5d..e51848d51aa0db18fc10652a70255051970c087a 100644
--- a/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj
+++ b/XEngine_Source/XEngine_APPService/XEngine_AuthorizeService/XEngine_AuthorizeService.vcxproj
@@ -43,7 +43,7 @@
Application
true
v142
- Unicode
+ MultiByte
Application
@@ -82,6 +82,8 @@
true
+ $(XEngine_Include);$(IncludePath)
+ $(XEngine_Lib64);$(LibraryPath)
false
@@ -122,7 +124,7 @@
Level3
true
- _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ _DEBUG;_CONSOLE;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
true
diff --git a/XEngine_Source/XEngine_AuthComponents/AuthComponents_SQLPacket/AuthComponents_SQLPacket.vcxproj b/XEngine_Source/XEngine_AuthComponents/AuthComponents_SQLPacket/AuthComponents_SQLPacket.vcxproj
index 9536a7f8bfdc6769ec68da5cf2fb356b6a670c3a..71c74364f954229fabc057dc6247b7614d25642b 100644
--- a/XEngine_Source/XEngine_AuthComponents/AuthComponents_SQLPacket/AuthComponents_SQLPacket.vcxproj
+++ b/XEngine_Source/XEngine_AuthComponents/AuthComponents_SQLPacket/AuthComponents_SQLPacket.vcxproj
@@ -43,7 +43,7 @@
DynamicLibrary
true
v142
- Unicode
+ MultiByte
DynamicLibrary
@@ -82,6 +82,8 @@
true
+ $(XEngine_Include);$(IncludePath)
+ $(XEngine_Lib64);$(LibraryPath)
false
@@ -131,7 +133,7 @@
Level3
true
- _DEBUG;AUTHCOMPONENTSSQLPACKET_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ _DEBUG;AUTHCOMPONENTSSQLPACKET_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
true
Use
pch.h
diff --git a/XEngine_Source/XEngine_AuthComponents/AuthComponents_Session/AuthComponents_Session.vcxproj b/XEngine_Source/XEngine_AuthComponents/AuthComponents_Session/AuthComponents_Session.vcxproj
index 19770cc490a1ce44ffcebc247de9248aad76e1d3..bbbefa93ea56807b5ab1addeeddd8b2a1f247372 100644
--- a/XEngine_Source/XEngine_AuthComponents/AuthComponents_Session/AuthComponents_Session.vcxproj
+++ b/XEngine_Source/XEngine_AuthComponents/AuthComponents_Session/AuthComponents_Session.vcxproj
@@ -43,7 +43,7 @@
DynamicLibrary
true
v142
- Unicode
+ MultiByte
DynamicLibrary
@@ -82,6 +82,8 @@
true
+ $(XEngine_Include);$(IncludePath)
+ $(XEngine_Lib64);$(LibraryPath)
false
@@ -131,7 +133,7 @@
Level3
true
- _DEBUG;AUTHCOMPONENTSSESSION_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
+ _DEBUG;AUTHCOMPONENTSSESSION_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
true
Use
pch.h
diff --git a/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/allocator.h b/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/allocator.h
new file mode 100644
index 0000000000000000000000000000000000000000..95ef8a5ec4d66b9aad6a0e0c1252c20a9a245791
--- /dev/null
+++ b/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/allocator.h
@@ -0,0 +1,88 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_ALLOCATOR_H_INCLUDED
+#define JSON_ALLOCATOR_H_INCLUDED
+
+#include
+#include
+
+#pragma pack(push, 8)
+
+namespace Json {
+template class SecureAllocator {
+public:
+ // Type definitions
+ using value_type = T;
+ using pointer = T*;
+ using const_pointer = const T*;
+ using reference = T&;
+ using const_reference = const T&;
+ using size_type = std::size_t;
+ using difference_type = std::ptrdiff_t;
+
+ /**
+ * Allocate memory for N items using the standard allocator.
+ */
+ pointer allocate(size_type n) {
+ // allocate using "global operator new"
+ return static_cast(::operator new(n * sizeof(T)));
+ }
+
+ /**
+ * Release memory which was allocated for N items at pointer P.
+ *
+ * The memory block is filled with zeroes before being released.
+ */
+ void deallocate(pointer p, size_type n) {
+ // memset_s is used because memset may be optimized away by the compiler
+ memset_s(p, n * sizeof(T), 0, n * sizeof(T));
+ // free using "global operator delete"
+ ::operator delete(p);
+ }
+
+ /**
+ * Construct an item in-place at pointer P.
+ */
+ template void construct(pointer p, Args&&... args) {
+ // construct using "placement new" and "perfect forwarding"
+ ::new (static_cast(p)) T(std::forward(args)...);
+ }
+
+ size_type max_size() const { return size_t(-1) / sizeof(T); }
+
+ pointer address(reference x) const { return std::addressof(x); }
+
+ const_pointer address(const_reference x) const { return std::addressof(x); }
+
+ /**
+ * Destroy an item in-place at pointer P.
+ */
+ void destroy(pointer p) {
+ // destroy using "explicit destructor"
+ p->~T();
+ }
+
+ // Boilerplate
+ SecureAllocator() {}
+ template SecureAllocator(const SecureAllocator&) {}
+ template struct rebind { using other = SecureAllocator; };
+};
+
+template
+bool operator==(const SecureAllocator&, const SecureAllocator&) {
+ return true;
+}
+
+template
+bool operator!=(const SecureAllocator&, const SecureAllocator&) {
+ return false;
+}
+
+} // namespace Json
+
+#pragma pack(pop)
+
+#endif // JSON_ALLOCATOR_H_INCLUDED
diff --git a/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/assertions.h b/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/assertions.h
new file mode 100644
index 0000000000000000000000000000000000000000..666fa7f542ccef943baa133f3bbf9e8b19845104
--- /dev/null
+++ b/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/assertions.h
@@ -0,0 +1,61 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_ASSERTIONS_H_INCLUDED
+#define JSON_ASSERTIONS_H_INCLUDED
+
+#include
+#include
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "config.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+/** It should not be possible for a maliciously designed file to
+ * cause an abort() or seg-fault, so these macros are used only
+ * for pre-condition violations and internal logic errors.
+ */
+#if JSON_USE_EXCEPTION
+
+// @todo <= add detail about condition in exception
+#define JSON_ASSERT(condition) \
+ do { \
+ if (!(condition)) { \
+ Json::throwLogicError("assert json failed"); \
+ } \
+ } while (0)
+
+#define JSON_FAIL_MESSAGE(message) \
+ do { \
+ OStringStream oss; \
+ oss << message; \
+ Json::throwLogicError(oss.str()); \
+ abort(); \
+ } while (0)
+
+#else // JSON_USE_EXCEPTION
+
+#define JSON_ASSERT(condition) assert(condition)
+
+// The call to assert() will show the failure message in debug builds. In
+// release builds we abort, for a core-dump or debugger.
+#define JSON_FAIL_MESSAGE(message) \
+ { \
+ OStringStream oss; \
+ oss << message; \
+ assert(false && oss.str().c_str()); \
+ abort(); \
+ }
+
+#endif
+
+#define JSON_ASSERT_MESSAGE(condition, message) \
+ do { \
+ if (!(condition)) { \
+ JSON_FAIL_MESSAGE(message); \
+ } \
+ } while (0)
+
+#endif // JSON_ASSERTIONS_H_INCLUDED
diff --git a/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/config.h b/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/config.h
new file mode 100644
index 0000000000000000000000000000000000000000..6359273a2228f822b1e9634a9221cc82f18bd491
--- /dev/null
+++ b/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/config.h
@@ -0,0 +1,150 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_CONFIG_H_INCLUDED
+#define JSON_CONFIG_H_INCLUDED
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+// If non-zero, the library uses exceptions to report bad input instead of C
+// assertion macros. The default is to use exceptions.
+#ifndef JSON_USE_EXCEPTION
+#define JSON_USE_EXCEPTION 1
+#endif
+
+// Temporary, tracked for removal with issue #982.
+#ifndef JSON_USE_NULLREF
+#define JSON_USE_NULLREF 1
+#endif
+
+/// If defined, indicates that the source file is amalgamated
+/// to prevent private header inclusion.
+/// Remarks: it is automatically defined in the generated amalgamated header.
+// #define JSON_IS_AMALGAMATION
+
+// Export macros for DLL visibility
+#if defined(JSON_DLL_BUILD)
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#define JSON_API __declspec(dllexport)
+#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
+#elif defined(__GNUC__) || defined(__clang__)
+#define JSON_API __attribute__((visibility("default")))
+#endif // if defined(_MSC_VER)
+
+#elif defined(JSON_DLL)
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#define JSON_API __declspec(dllimport)
+#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
+#endif // if defined(_MSC_VER)
+#endif // ifdef JSON_DLL_BUILD
+
+#if !defined(JSON_API)
+#define JSON_API
+#endif
+
+#if defined(_MSC_VER) && _MSC_VER < 1800
+#error \
+ "ERROR: Visual Studio 12 (2013) with _MSC_VER=1800 is the oldest supported compiler with sufficient C++11 capabilities"
+#endif
+
+#if defined(_MSC_VER) && _MSC_VER < 1900
+// As recommended at
+// https://stackoverflow.com/questions/2915672/snprintf-and-visual-studio-2010
+extern JSON_API int msvc_pre1900_c99_snprintf(char* outBuf, size_t size,
+ const char* format, ...);
+#define jsoncpp_snprintf msvc_pre1900_c99_snprintf
+#else
+#define jsoncpp_snprintf std::snprintf
+#endif
+
+// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for
+// integer
+// Storages, and 64 bits integer support is disabled.
+// #define JSON_NO_INT64 1
+
+// JSONCPP_OVERRIDE is maintained for backwards compatibility of external tools.
+// C++11 should be used directly in JSONCPP.
+#define JSONCPP_OVERRIDE override
+
+#ifdef __clang__
+#if __has_extension(attribute_deprecated_with_message)
+#define JSONCPP_DEPRECATED(message) __attribute__((deprecated(message)))
+#endif
+#elif defined(__GNUC__) // not clang (gcc comes later since clang emulates gcc)
+#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
+#define JSONCPP_DEPRECATED(message) __attribute__((deprecated(message)))
+#elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
+#define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__))
+#endif // GNUC version
+#elif defined(_MSC_VER) // MSVC (after clang because clang on Windows emulates
+ // MSVC)
+#define JSONCPP_DEPRECATED(message) __declspec(deprecated(message))
+#endif // __clang__ || __GNUC__ || _MSC_VER
+
+#if !defined(JSONCPP_DEPRECATED)
+#define JSONCPP_DEPRECATED(message)
+#endif // if !defined(JSONCPP_DEPRECATED)
+
+#if defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 6))
+#define JSON_USE_INT64_DOUBLE_CONVERSION 1
+#endif
+
+#if !defined(JSON_IS_AMALGAMATION)
+
+#include "allocator.h"
+#include "version.h"
+
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+namespace Json {
+using Int = int;
+using UInt = unsigned int;
+#if defined(JSON_NO_INT64)
+using LargestInt = int;
+using LargestUInt = unsigned int;
+#undef JSON_HAS_INT64
+#else // if defined(JSON_NO_INT64)
+// For Microsoft Visual use specific types as long long is not supported
+#if defined(_MSC_VER) // Microsoft Visual Studio
+using Int64 = __int64;
+using UInt64 = unsigned __int64;
+#else // if defined(_MSC_VER) // Other platforms, use long long
+using Int64 = int64_t;
+using UInt64 = uint64_t;
+#endif // if defined(_MSC_VER)
+using LargestInt = Int64;
+using LargestUInt = UInt64;
+#define JSON_HAS_INT64
+#endif // if defined(JSON_NO_INT64)
+
+template
+using Allocator =
+ typename std::conditional,
+ std::allocator>::type;
+using String = std::basic_string, Allocator>;
+using IStringStream =
+ std::basic_istringstream;
+using OStringStream =
+ std::basic_ostringstream;
+using IStream = std::istream;
+using OStream = std::ostream;
+} // namespace Json
+
+// Legacy names (formerly macros).
+using JSONCPP_STRING = Json::String;
+using JSONCPP_ISTRINGSTREAM = Json::IStringStream;
+using JSONCPP_OSTRINGSTREAM = Json::OStringStream;
+using JSONCPP_ISTREAM = Json::IStream;
+using JSONCPP_OSTREAM = Json::OStream;
+
+#endif // JSON_CONFIG_H_INCLUDED
diff --git a/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/forwards.h b/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/forwards.h
new file mode 100644
index 0000000000000000000000000000000000000000..affe33a7f9ec662ede90eef7dd200da89aa7dede
--- /dev/null
+++ b/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/forwards.h
@@ -0,0 +1,43 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_FORWARDS_H_INCLUDED
+#define JSON_FORWARDS_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "config.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+namespace Json {
+
+// writer.h
+class StreamWriter;
+class StreamWriterBuilder;
+class Writer;
+class FastWriter;
+class StyledWriter;
+class StyledStreamWriter;
+
+// reader.h
+class Reader;
+class CharReader;
+class CharReaderBuilder;
+
+// json_features.h
+class Features;
+
+// value.h
+using ArrayIndex = unsigned int;
+class StaticString;
+class Path;
+class PathArgument;
+class Value;
+class ValueIteratorBase;
+class ValueIterator;
+class ValueConstIterator;
+
+} // namespace Json
+
+#endif // JSON_FORWARDS_H_INCLUDED
diff --git a/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/json.h b/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/json.h
new file mode 100644
index 0000000000000000000000000000000000000000..5c776a1609e6111bd156195956837cc762410ee2
--- /dev/null
+++ b/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/json.h
@@ -0,0 +1,15 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_JSON_H_INCLUDED
+#define JSON_JSON_H_INCLUDED
+
+#include "config.h"
+#include "json_features.h"
+#include "reader.h"
+#include "value.h"
+#include "writer.h"
+
+#endif // JSON_JSON_H_INCLUDED
diff --git a/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/json_features.h b/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/json_features.h
new file mode 100644
index 0000000000000000000000000000000000000000..7c7e9f5de15e259eba132de8efa5d80b78f9f92c
--- /dev/null
+++ b/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/json_features.h
@@ -0,0 +1,61 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_FEATURES_H_INCLUDED
+#define JSON_FEATURES_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "forwards.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+#pragma pack(push, 8)
+
+namespace Json {
+
+/** \brief Configuration passed to reader and writer.
+ * This configuration object can be used to force the Reader or Writer
+ * to behave in a standard conforming way.
+ */
+class JSON_API Features {
+public:
+ /** \brief A configuration that allows all features and assumes all strings
+ * are UTF-8.
+ * - C & C++ comments are allowed
+ * - Root object can be any JSON value
+ * - Assumes Value strings are encoded in UTF-8
+ */
+ static Features all();
+
+ /** \brief A configuration that is strictly compatible with the JSON
+ * specification.
+ * - Comments are forbidden.
+ * - Root object must be either an array or an object value.
+ * - Assumes Value strings are encoded in UTF-8
+ */
+ static Features strictMode();
+
+ /** \brief Initialize the configuration like JsonConfig::allFeatures;
+ */
+ Features();
+
+ /// \c true if comments are allowed. Default: \c true.
+ bool allowComments_{true};
+
+ /// \c true if root must be either an array or an object value. Default: \c
+ /// false.
+ bool strictRoot_{false};
+
+ /// \c true if dropped null placeholders are allowed. Default: \c false.
+ bool allowDroppedNullPlaceholders_{false};
+
+ /// \c true if numeric object key are allowed. Default: \c false.
+ bool allowNumericKeys_{false};
+};
+
+} // namespace Json
+
+#pragma pack(pop)
+
+#endif // JSON_FEATURES_H_INCLUDED
diff --git a/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/reader.h b/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/reader.h
new file mode 100644
index 0000000000000000000000000000000000000000..be0d7676abc597c186a481d8e3d84c5643b2a482
--- /dev/null
+++ b/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/reader.h
@@ -0,0 +1,405 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_READER_H_INCLUDED
+#define JSON_READER_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "json_features.h"
+#include "value.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include
+#include
+#include
+#include
+#include
+
+// Disable warning C4251: : needs to have dll-interface to
+// be used by...
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(push)
+#pragma warning(disable : 4251)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#pragma pack(push, 8)
+
+namespace Json {
+
+/** \brief Unserialize a JSON document into a
+ * Value.
+ *
+ * \deprecated Use CharReader and CharReaderBuilder.
+ */
+
+class JSON_API Reader {
+public:
+ using Char = char;
+ using Location = const Char*;
+
+ /** \brief An error tagged with where in the JSON text it was encountered.
+ *
+ * The offsets give the [start, limit) range of bytes within the text. Note
+ * that this is bytes, not codepoints.
+ */
+ struct StructuredError {
+ ptrdiff_t offset_start;
+ ptrdiff_t offset_limit;
+ String message;
+ };
+
+ /** \brief Constructs a Reader allowing all features for parsing.
+ * \deprecated Use CharReader and CharReaderBuilder.
+ */
+ Reader();
+
+ /** \brief Constructs a Reader allowing the specified feature set for parsing.
+ * \deprecated Use CharReader and CharReaderBuilder.
+ */
+ Reader(const Features& features);
+
+ /** \brief Read a Value from a JSON
+ * document.
+ *
+ * \param document UTF-8 encoded string containing the document
+ * to read.
+ * \param[out] root Contains the root value of the document if it
+ * was successfully parsed.
+ * \param collectComments \c true to collect comment and allow writing
+ * them back during serialization, \c false to
+ * discard comments. This parameter is ignored
+ * if Features::allowComments_ is \c false.
+ * \return \c true if the document was successfully parsed, \c false if an
+ * error occurred.
+ */
+ bool parse(const std::string& document, Value& root,
+ bool collectComments = true);
+
+ /** \brief Read a Value from a JSON
+ * document.
+ *
+ * \param beginDoc Pointer on the beginning of the UTF-8 encoded
+ * string of the document to read.
+ * \param endDoc Pointer on the end of the UTF-8 encoded string
+ * of the document to read. Must be >= beginDoc.
+ * \param[out] root Contains the root value of the document if it
+ * was successfully parsed.
+ * \param collectComments \c true to collect comment and allow writing
+ * them back during serialization, \c false to
+ * discard comments. This parameter is ignored
+ * if Features::allowComments_ is \c false.
+ * \return \c true if the document was successfully parsed, \c false if an
+ * error occurred.
+ */
+ bool parse(const char* beginDoc, const char* endDoc, Value& root,
+ bool collectComments = true);
+
+ /// \brief Parse from input stream.
+ /// \see Json::operator>>(std::istream&, Json::Value&).
+ bool parse(IStream& is, Value& root, bool collectComments = true);
+
+ /** \brief Returns a user friendly string that list errors in the parsed
+ * document.
+ *
+ * \return Formatted error message with the list of errors with their
+ * location in the parsed document. An empty string is returned if no error
+ * occurred during parsing.
+ * \deprecated Use getFormattedErrorMessages() instead (typo fix).
+ */
+ JSONCPP_DEPRECATED("Use getFormattedErrorMessages() instead.")
+ String getFormatedErrorMessages() const;
+
+ /** \brief Returns a user friendly string that list errors in the parsed
+ * document.
+ *
+ * \return Formatted error message with the list of errors with their
+ * location in the parsed document. An empty string is returned if no error
+ * occurred during parsing.
+ */
+ String getFormattedErrorMessages() const;
+
+ /** \brief Returns a vector of structured errors encountered while parsing.
+ *
+ * \return A (possibly empty) vector of StructuredError objects. Currently
+ * only one error can be returned, but the caller should tolerate multiple
+ * errors. This can occur if the parser recovers from a non-fatal parse
+ * error and then encounters additional errors.
+ */
+ std::vector getStructuredErrors() const;
+
+ /** \brief Add a semantic error message.
+ *
+ * \param value JSON Value location associated with the error
+ * \param message The error message.
+ * \return \c true if the error was successfully added, \c false if the Value
+ * offset exceeds the document size.
+ */
+ bool pushError(const Value& value, const String& message);
+
+ /** \brief Add a semantic error message with extra context.
+ *
+ * \param value JSON Value location associated with the error
+ * \param message The error message.
+ * \param extra Additional JSON Value location to contextualize the error
+ * \return \c true if the error was successfully added, \c false if either
+ * Value offset exceeds the document size.
+ */
+ bool pushError(const Value& value, const String& message, const Value& extra);
+
+ /** \brief Return whether there are any errors.
+ *
+ * \return \c true if there are no errors to report \c false if errors have
+ * occurred.
+ */
+ bool good() const;
+
+private:
+ enum TokenType {
+ tokenEndOfStream = 0,
+ tokenObjectBegin,
+ tokenObjectEnd,
+ tokenArrayBegin,
+ tokenArrayEnd,
+ tokenString,
+ tokenNumber,
+ tokenTrue,
+ tokenFalse,
+ tokenNull,
+ tokenArraySeparator,
+ tokenMemberSeparator,
+ tokenComment,
+ tokenError
+ };
+
+ class Token {
+ public:
+ TokenType type_;
+ Location start_;
+ Location end_;
+ };
+
+ class ErrorInfo {
+ public:
+ Token token_;
+ String message_;
+ Location extra_;
+ };
+
+ using Errors = std::deque;
+
+ bool readToken(Token& token);
+ void skipSpaces();
+ bool match(const Char* pattern, int patternLength);
+ bool readComment();
+ bool readCStyleComment();
+ bool readCppStyleComment();
+ bool readString();
+ void readNumber();
+ bool readValue();
+ bool readObject(Token& token);
+ bool readArray(Token& token);
+ bool decodeNumber(Token& token);
+ bool decodeNumber(Token& token, Value& decoded);
+ bool decodeString(Token& token);
+ bool decodeString(Token& token, String& decoded);
+ bool decodeDouble(Token& token);
+ bool decodeDouble(Token& token, Value& decoded);
+ bool decodeUnicodeCodePoint(Token& token, Location& current, Location end,
+ unsigned int& unicode);
+ bool decodeUnicodeEscapeSequence(Token& token, Location& current,
+ Location end, unsigned int& unicode);
+ bool addError(const String& message, Token& token, Location extra = nullptr);
+ bool recoverFromError(TokenType skipUntilToken);
+ bool addErrorAndRecover(const String& message, Token& token,
+ TokenType skipUntilToken);
+ void skipUntilSpace();
+ Value& currentValue();
+ Char getNextChar();
+ void getLocationLineAndColumn(Location location, int& line,
+ int& column) const;
+ String getLocationLineAndColumn(Location location) const;
+ void addComment(Location begin, Location end, CommentPlacement placement);
+ void skipCommentTokens(Token& token);
+
+ static bool containsNewLine(Location begin, Location end);
+ static String normalizeEOL(Location begin, Location end);
+
+ using Nodes = std::stack;
+ Nodes nodes_;
+ Errors errors_;
+ String document_;
+ Location begin_{};
+ Location end_{};
+ Location current_{};
+ Location lastValueEnd_{};
+ Value* lastValue_{};
+ String commentsBefore_;
+ Features features_;
+ bool collectComments_{};
+}; // Reader
+
+/** Interface for reading JSON from a char array.
+ */
+class JSON_API CharReader {
+public:
+ virtual ~CharReader() = default;
+ /** \brief Read a Value from a JSON
+ * document. The document must be a UTF-8 encoded string containing the
+ * document to read.
+ *
+ * \param beginDoc Pointer on the beginning of the UTF-8 encoded string
+ * of the document to read.
+ * \param endDoc Pointer on the end of the UTF-8 encoded string of the
+ * document to read. Must be >= beginDoc.
+ * \param[out] root Contains the root value of the document if it was
+ * successfully parsed.
+ * \param[out] errs Formatted error messages (if not NULL) a user
+ * friendly string that lists errors in the parsed
+ * document.
+ * \return \c true if the document was successfully parsed, \c false if an
+ * error occurred.
+ */
+ virtual bool parse(char const* beginDoc, char const* endDoc, Value* root,
+ String* errs) = 0;
+
+ class JSON_API Factory {
+ public:
+ virtual ~Factory() = default;
+ /** \brief Allocate a CharReader via operator new().
+ * \throw std::exception if something goes wrong (e.g. invalid settings)
+ */
+ virtual CharReader* newCharReader() const = 0;
+ }; // Factory
+}; // CharReader
+
+/** \brief Build a CharReader implementation.
+ *
+ * Usage:
+ * \code
+ * using namespace Json;
+ * CharReaderBuilder builder;
+ * builder["collectComments"] = false;
+ * Value value;
+ * String errs;
+ * bool ok = parseFromStream(builder, std::cin, &value, &errs);
+ * \endcode
+ */
+class JSON_API CharReaderBuilder : public CharReader::Factory {
+public:
+ // Note: We use a Json::Value so that we can add data-members to this class
+ // without a major version bump.
+ /** Configuration of this builder.
+ * These are case-sensitive.
+ * Available settings (case-sensitive):
+ * - `"collectComments": false or true`
+ * - true to collect comment and allow writing them back during
+ * serialization, false to discard comments. This parameter is ignored
+ * if allowComments is false.
+ * - `"allowComments": false or true`
+ * - true if comments are allowed.
+ * - `"allowTrailingCommas": false or true`
+ * - true if trailing commas in objects and arrays are allowed.
+ * - `"strictRoot": false or true`
+ * - true if root must be either an array or an object value
+ * - `"allowDroppedNullPlaceholders": false or true`
+ * - true if dropped null placeholders are allowed. (See
+ * StreamWriterBuilder.)
+ * - `"allowNumericKeys": false or true`
+ * - true if numeric object keys are allowed.
+ * - `"allowSingleQuotes": false or true`
+ * - true if '' are allowed for strings (both keys and values)
+ * - `"stackLimit": integer`
+ * - Exceeding stackLimit (recursive depth of `readValue()`) will cause an
+ * exception.
+ * - This is a security issue (seg-faults caused by deeply nested JSON), so
+ * the default is low.
+ * - `"failIfExtra": false or true`
+ * - If true, `parse()` returns false when extra non-whitespace trails the
+ * JSON value in the input string.
+ * - `"rejectDupKeys": false or true`
+ * - If true, `parse()` returns false when a key is duplicated within an
+ * object.
+ * - `"allowSpecialFloats": false or true`
+ * - If true, special float values (NaNs and infinities) are allowed and
+ * their values are lossfree restorable.
+ * - `"skipBom": false or true`
+ * - If true, if the input starts with the Unicode byte order mark (BOM),
+ * it is skipped.
+ *
+ * You can examine 'settings_` yourself to see the defaults. You can also
+ * write and read them just like any JSON Value.
+ * \sa setDefaults()
+ */
+ Json::Value settings_;
+
+ CharReaderBuilder();
+ ~CharReaderBuilder() override;
+
+ CharReader* newCharReader() const override;
+
+ /** \return true if 'settings' are legal and consistent;
+ * otherwise, indicate bad settings via 'invalid'.
+ */
+ bool validate(Json::Value* invalid) const;
+
+ /** A simple way to update a specific setting.
+ */
+ Value& operator[](const String& key);
+
+ /** Called by ctor, but you can use this to reset settings_.
+ * \pre 'settings' != NULL (but Json::null is fine)
+ * \remark Defaults:
+ * \snippet src/lib_json/json_reader.cpp CharReaderBuilderDefaults
+ */
+ static void setDefaults(Json::Value* settings);
+ /** Same as old Features::strictMode().
+ * \pre 'settings' != NULL (but Json::null is fine)
+ * \remark Defaults:
+ * \snippet src/lib_json/json_reader.cpp CharReaderBuilderStrictMode
+ */
+ static void strictMode(Json::Value* settings);
+};
+
+/** Consume entire stream and use its begin/end.
+ * Someday we might have a real StreamReader, but for now this
+ * is convenient.
+ */
+bool JSON_API parseFromStream(CharReader::Factory const&, IStream&, Value* root,
+ String* errs);
+
+/** \brief Read from 'sin' into 'root'.
+ *
+ * Always keep comments from the input JSON.
+ *
+ * This can be used to read a file into a particular sub-object.
+ * For example:
+ * \code
+ * Json::Value root;
+ * cin >> root["dir"]["file"];
+ * cout << root;
+ * \endcode
+ * Result:
+ * \verbatim
+ * {
+ * "dir": {
+ * "file": {
+ * // The input stream JSON would be nested here.
+ * }
+ * }
+ * }
+ * \endverbatim
+ * \throw std::exception on parse error.
+ * \see Json::operator<<()
+ */
+JSON_API IStream& operator>>(IStream&, Value&);
+
+} // namespace Json
+
+#pragma pack(pop)
+
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(pop)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#endif // JSON_READER_H_INCLUDED
diff --git a/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/value.h b/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/value.h
new file mode 100644
index 0000000000000000000000000000000000000000..0edeb050ca02dbd85f75751225a8824e23ac6b73
--- /dev/null
+++ b/XEngine_Source/XEngine_ThirdPart/jsoncpp/json/value.h
@@ -0,0 +1,935 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_H_INCLUDED
+#define JSON_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "forwards.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+// Conditional NORETURN attribute on the throw functions would:
+// a) suppress false positives from static code analysis
+// b) possibly improve optimization opportunities.
+#if !defined(JSONCPP_NORETURN)
+#if defined(_MSC_VER) && _MSC_VER == 1800
+#define JSONCPP_NORETURN __declspec(noreturn)
+#else
+#define JSONCPP_NORETURN [[noreturn]]
+#endif
+#endif
+
+// Support for '= delete' with template declarations was a late addition
+// to the c++11 standard and is rejected by clang 3.8 and Apple clang 8.2
+// even though these declare themselves to be c++11 compilers.
+#if !defined(JSONCPP_TEMPLATE_DELETE)
+#if defined(__clang__) && defined(__apple_build_version__)
+#if __apple_build_version__ <= 8000042
+#define JSONCPP_TEMPLATE_DELETE
+#endif
+#elif defined(__clang__)
+#if __clang_major__ == 3 && __clang_minor__ <= 8
+#define JSONCPP_TEMPLATE_DELETE
+#endif
+#endif
+#if !defined(JSONCPP_TEMPLATE_DELETE)
+#define JSONCPP_TEMPLATE_DELETE = delete
+#endif
+#endif
+
+#include
+#include
+#include