diff --git a/uft_dev_server/CMakeLists.txt b/uft_dev_server/CMakeLists.txt index 8025ffd..bebd8a0 100644 --- a/uft_dev_server/CMakeLists.txt +++ b/uft_dev_server/CMakeLists.txt @@ -14,6 +14,7 @@ set(SOURCE_DIR src) # 查找依赖包 find_package(Drogon CONFIG REQUIRED) find_package(RapidJSON CONFIG REQUIRED) +find_package(RCCPP REQUIRED) # 添加可执行文件 add_executable(${PROJECT_NAME} @@ -27,6 +28,7 @@ add_executable(${PROJECT_NAME} target_link_libraries(${PROJECT_NAME} PRIVATE Drogon::Drogon ${CMAKE_DL_LIBS} # 用于动态加载 + RCCPP::RCCPP ) # 包含目录 @@ -36,6 +38,10 @@ target_include_directories(${PROJECT_NAME} PRIVATE ${SOURCE_DIR}/filters ) +# 设置RCC++编译选项 +set(RCCPP_SOURCE_DIR ${SOURCE_DIR}) +set(RCCPP_INCLUDE_DIRS ${SOURCE_DIR} ${SOURCE_DIR}/controllers ${SOURCE_DIR}/filters) + # 配置文件拷贝 set(CONFIG_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/config/config.json") set(CONFIG_DEST "${CMAKE_CURRENT_BINARY_DIR}/Debug/config.json") diff --git a/uft_dev_server/cmd.txt b/uft_dev_server/cmd.txt index 0629965..f4903c9 100644 --- a/uft_dev_server/cmd.txt +++ b/uft_dev_server/cmd.txt @@ -1,3 +1,5 @@ +cd D:/aigc/manta/uft_dev_server rm -Path build -Recurse -Force cmake -B build -DCMAKE_TOOLCHAIN_FILE="D:/aigc/vcpkg/scripts/buildsystems/vcpkg.cmake" -cmake --build build \ No newline at end of file +cmake --build build + diff --git a/uft_dev_server/rccpp_config.h b/uft_dev_server/rccpp_config.h new file mode 100644 index 0000000..a31473f --- /dev/null +++ b/uft_dev_server/rccpp_config.h @@ -0,0 +1,8 @@ +#pragma once + +#define RCCPPUSER_USE_PRECOMPILED_HEADER 0 +#define RCCPPUSER_USE_EXCEPTIONS 1 +#define RCCPPUSER_USE_RTTI 1 +#define RCCPPUSER_USE_DEBUG_NEW 0 +#define RCCPPUSER_USE_VLD 0 +#define RCCPPUSER_USE_IMGUI 0 \ No newline at end of file diff --git a/uft_dev_server/src/controllers/ApiController.cpp b/uft_dev_server/src/controllers/ApiController.cpp index 6f85c97..78572ad 100644 --- a/uft_dev_server/src/controllers/ApiController.cpp +++ b/uft_dev_server/src/controllers/ApiController.cpp @@ -1,5 +1,4 @@ -#pragma once -#include +#include #include #include diff --git a/uft_dev_server/src/controllers/HelloWorldController.cpp b/uft_dev_server/src/controllers/HelloWorldController.cpp index 5c5a322..74ab22c 100644 --- a/uft_dev_server/src/controllers/HelloWorldController.cpp +++ b/uft_dev_server/src/controllers/HelloWorldController.cpp @@ -7,6 +7,6 @@ void HelloWorldController::asyncHandleHttpRequest( std::function &&callback) { auto resp = HttpResponse::newHttpResponse(); - resp->setBody("Hello, World!"); + resp->setBody("Hello, World! 欢迎访问 UFT C++ Server 开发 Project!"); callback(resp); } \ No newline at end of file diff --git a/uft_dev_server/src/controllers/HelloWorldController.h b/uft_dev_server/src/controllers/HelloWorldController.h index 7a88b3d..7d83cf5 100644 --- a/uft_dev_server/src/controllers/HelloWorldController.h +++ b/uft_dev_server/src/controllers/HelloWorldController.h @@ -1,9 +1,13 @@ +// HelloWorldController.h #pragma once #include +#include using namespace drogon; -class HelloWorldController : public HttpSimpleController +class HelloWorldController : + public HttpSimpleController, + public RCCPP::RuntimeObject { public: PATH_LIST_BEGIN @@ -12,4 +16,8 @@ public: void asyncHandleHttpRequest(const HttpRequestPtr &req, std::function &&callback) override; + + // RCC++需要的接口 + virtual void Construct() {} + virtual void Serialize(ISimpleSerializer* pSerializer) {} }; \ No newline at end of file diff --git a/uft_dev_server/src/main.cpp b/uft_dev_server/src/main.cpp index 457e0ce..acd098e 100644 --- a/uft_dev_server/src/main.cpp +++ b/uft_dev_server/src/main.cpp @@ -1,20 +1,45 @@ -#include +#include +#include +#include +#include #include using namespace drogon; +class MyAppSystem : public RCCPP::ISystem +{ +public: + virtual bool Initialise() { return true; } + virtual void Shutdown() {} + virtual void Update(float deltaTime) {} +}; + int main() { try { + // 初始化RCC++ + RCCPP::RuntimeObjectSystem runtimeObjectSystem; + runtimeObjectSystem.Initialise(new MyAppSystem, "."); + // 设置日志级别 drogon::app().setLogLevel(trantor::Logger::kTrace); - drogon::app().registerBeginningAdvice([]() - { LOG_INFO << "Drogon application starting..."; }); + drogon::app().registerBeginningAdvice([]() { + LOG_INFO << "Drogon application starting..."; + }); // 加载配置 drogon::app().loadConfigFile("./config.json"); + // 启动文件监视器 + auto& fileChangeNotifier = runtimeObjectSystem.GetFileChangeNotifier(); + fileChangeNotifier.AddWatch(".", true); + + // 主循环中检查文件变化 + drogon::app().registerBeginningAdvice([&]() { + runtimeObjectSystem.GetRuntimeCompiler()->Update(0.1f); + }); + // 启动服务 drogon::app().run(); } diff --git a/uft_dev_server/third_party/RCCPP/Assets/GUI/Anonymous.ttf b/uft_dev_server/third_party/RCCPP/Assets/GUI/Anonymous.ttf new file mode 100644 index 0000000..3192af8 Binary files /dev/null and b/uft_dev_server/third_party/RCCPP/Assets/GUI/Anonymous.ttf differ diff --git a/uft_dev_server/third_party/RCCPP/Assets/GUI/Delicious-Bold.otf b/uft_dev_server/third_party/RCCPP/Assets/GUI/Delicious-Bold.otf new file mode 100644 index 0000000..e5b1e25 Binary files /dev/null and b/uft_dev_server/third_party/RCCPP/Assets/GUI/Delicious-Bold.otf differ diff --git a/uft_dev_server/third_party/RCCPP/Assets/GUI/Delicious-BoldItalic.otf b/uft_dev_server/third_party/RCCPP/Assets/GUI/Delicious-BoldItalic.otf new file mode 100644 index 0000000..81bf13b Binary files /dev/null and b/uft_dev_server/third_party/RCCPP/Assets/GUI/Delicious-BoldItalic.otf differ diff --git a/uft_dev_server/third_party/RCCPP/Assets/GUI/Delicious-Italic.otf b/uft_dev_server/third_party/RCCPP/Assets/GUI/Delicious-Italic.otf new file mode 100644 index 0000000..d57df3b Binary files /dev/null and b/uft_dev_server/third_party/RCCPP/Assets/GUI/Delicious-Italic.otf differ diff --git a/uft_dev_server/third_party/RCCPP/Assets/GUI/Delicious-Roman.otf b/uft_dev_server/third_party/RCCPP/Assets/GUI/Delicious-Roman.otf new file mode 100644 index 0000000..31ec11a Binary files /dev/null and b/uft_dev_server/third_party/RCCPP/Assets/GUI/Delicious-Roman.otf differ diff --git a/uft_dev_server/third_party/RCCPP/Assets/GUI/compiling-notification.rcss b/uft_dev_server/third_party/RCCPP/Assets/GUI/compiling-notification.rcss new file mode 100644 index 0000000..fbbd923 --- /dev/null +++ b/uft_dev_server/third_party/RCCPP/Assets/GUI/compiling-notification.rcss @@ -0,0 +1,32 @@ +body +{ + font-family: Delicious; + font-weight: normal; + font-style: normal; + font-size: 20; + color: white; + z-index: -3; +} + +body +{ + height: 100%; + width: 100%; +} + +div#compiling +{ + font-size: 16; + font-weight: bold; + + background-color: #303030; + + text-align: left; + + position:absolute; + bottom: 9px; + right: 40px; + width: 200px; +} + + diff --git a/uft_dev_server/third_party/RCCPP/Assets/GUI/compiling-notification.rml b/uft_dev_server/third_party/RCCPP/Assets/GUI/compiling-notification.rml new file mode 100644 index 0000000..1ec4bb1 --- /dev/null +++ b/uft_dev_server/third_party/RCCPP/Assets/GUI/compiling-notification.rml @@ -0,0 +1,10 @@ + + + + + CompilingNotification + + +
+ +
diff --git a/uft_dev_server/third_party/RCCPP/Assets/GUI/console.rcss b/uft_dev_server/third_party/RCCPP/Assets/GUI/console.rcss new file mode 100644 index 0000000..e3426ea --- /dev/null +++ b/uft_dev_server/third_party/RCCPP/Assets/GUI/console.rcss @@ -0,0 +1,515 @@ +body +{ + font-family: Delicious; + font-weight: normal; + font-style: normal; + font-size: 15pt; + color: white; + + top: 100px; + left: 30px; +} + +div#title_bar +{ + z-index: 2; + + position: absolute; + top: -33px; + + text-align: left; +} + +div#title_bar span +{ + padding-left: 30px; + padding-right: 20px; + padding-top: 12px; + padding-bottom: 35px; + + font-size: 18pt; + font-weight: bold; + + outline-font-effect: outline; + outline-width: 1px; + outline-color: black; + + background-decorator: tiled-horizontal; + background-left-image: console.tga 147px 0px 229px 85px; + background-center-image: console.tga stretch 229px 0px 230px 85px; + background-right-image: console.tga 231px 0px 246px 85px; +} + +div#window +{ + z-index: 2; + width: 600px; + height: auto; + + background-decorator: tiled-box; + background-top-left-image: console.tga 0px 0px 133px 15px; + background-top-right-image: console.tga 136px 0px 146px 15px; + background-top-image: console.tga stretch 134px 0px 135px 15px; + background-bottom-left-image: console.tga 0px 16px 11px 31px; + background-bottom-right-image: console.tga 136px 16px 146px 31px; + background-bottom-image: console.tga stretch 11px 16px 12px 31px; + background-left-image: console.tga stretch 0px 15px 10px 16px; + background-center-image: console.tga stretch 11px 15px 12px 16px; +} + +div#content +{ + z-index: 2; + + overflow: hidden auto; + + text-align: left; + + padding-left: 7px; + padding-right: 7px; + padding-bottom: 3px; +} + +div#controls +{ + z-index: 2; + + margin-top: 8px; + margin-right: 10px; + text-align: right; +} + +select, +dataselect +{ + margin-left: 20px; +} + +input.text, +textarea +{ + font-family: Anonymous; + font-size: 16pt; +} + +input.submit +{ + margin-left: 7px; + margin-bottom: 4px; +} + +button, +input.submit +{ + display: inline-block; + + width: 80px; + height: 28px; + + padding-top: 5px; + vertical-align: -18px; + + font-size: 14pt; + font-weight: bold; + text-align: center; + tab-index: auto; + + background-decorator: image; + background-image: console.tga 247px 0px 406px 45px; +} + +button:focus, +input.submit:focus +{ + font-weight: bold; + + shadow-font-effect: shadow; + shadow-offset: 1px 1px; + shadow-color: black; +} + +button:hover, +input.submit:hover +{ + background-image-t: 45px 90px; +} + +button:active, +input.submit:active +{ + background-image-t: 90px 135px; +} + +button:disabled, +input.submit:disabled +{ + background-image-t: 90px 135px; + color: grey; + font-weight: normal; +} + +input.text, +textarea +{ + padding: 5px; + padding-left: 10px; + padding-top: 10px; + margin: 5px; + margin-bottom: 0px; + + background-decorator: tiled-box; + background-top-left-image: console.tga 281px 272px 292px 284px; + background-top-right-image: console.tga 294px 272px 305px 284px; + background-top-image: console.tga stretch 292px 272px 293px 284px; + background-bottom-left-image: console.tga 281px 285px 292px 296px; + background-bottom-right-image: console.tga 294px 285px 305px 296px; + background-bottom-image: console.tga stretch 292px 285px 293px 296px; + background-left-image: console.tga stretch 281px 283px 292px 284px; + background-center-image: console.tga stretch 292px 283px 293px 284px; +} + +input.text +{ + height: 35px; + width: 677px; +} + +textarea +{ + height: 155px; + width: 677px; +} + +input.text, +select, +dataselect, +textarea +{ + color: black; + font-size: 13pt; +} + +datagrid input.text +{ + width: 100%; + height: auto; + margin: 0px; + padding: 0px 2px 0px; + + border-width: 1px; + border-color: black; + background-color: white; + + font-size: 15pt; + + background-decorator: none; +} + + + +select, +dataselect +{ + width: 175px; + height: 37px; +} + +select selectvalue, +dataselect selectvalue +{ + width: auto; + margin-right: 30px; + + height: 28px; + padding: 9px 10px 0px 10px; + + background-decorator: image; + background-image: console.tga 162px 192px 307px 229px; +} + +select selectvalue:hover, +dataselect selectvalue:hover +{ + background-image-t: 230px 267px; +} + +select selectarrow, +dataselect selectarrow +{ + width: 30px; + height: 37px; + + icon-decorator: image; + icon-image: console.tga 307px 192px 337px 229px; +} + +select selectarrow:hover, +dataselect selectarrow:hover +{ + icon-image-t: 230px 267px; +} + +select selectarrow:active, +select selectarrow:checked, +dataselect selectarrow:active, +dataselect selectarrow:checked +{ + icon-image-t: 268px 305px; +} + +select selectbox, +dataselect selectbox +{ + margin-left: 1px; + margin-top: -7px; + width: 162px; + padding: 1px 4px 4px 4px; +} + +select selectbox, +dataselect selectbox, +datagrid datagridbody +{ + background-decorator: tiled-box; + background-top-left-image: console.tga 281px 275px 292px 284px; + background-top-right-image: console.tga 294px 275px 305px 284px; + background-top-image: console.tga stretch 292px 275px 293px 284px; + background-bottom-left-image: console.tga 281px 285px 292px 296px; + background-bottom-right-image: console.tga 294px 285px 305px 296px; + background-bottom-image: console.tga stretch 292px 285px 293px 296px; + background-left-image: console.tga stretch 281px 283px 292px 284px; + background-center-image: console.tga stretch 292px 283px 293px 284px; +} + +select selectbox option, +dataselect selectbox option +{ + width: auto; + padding-left: 3px; +} + +select selectbox option:nth-child(even), +dataselect selectbox option:nth-child(even), +datagrid datagridrow:nth-child(even) +{ + background: #FFFFFFA0; +} + +select selectbox option:hover, +dataselect selectbox option:hover +{ + background: #FF5D5D; +} + + + +input.radio, +input.checkbox +{ + width: 30px; + height: 30px; + + vertical-align: -11px; +} + +input.radio +{ + icon-decorator: image; + icon-image: console.tga 407px 0px 437px 30px; +} + +input.radio:hover +{ + icon-image-s: 437px 467px; +} + +input.radio:active +{ + icon-image-s: 467px 497px; +} + +input.radio:checked +{ + icon-image-t: 30px 60px; +} + +input.radio:checked:hover +{ + icon-image-s: 437px 467px; + icon-image-t: 30px 60px; +} + +input.radio:checked:active +{ + icon-image-s: 467px 497px; + icon-image-t: 30px 60px; +} + +input.checkbox +{ + icon-decorator: image; + icon-image: console.tga 407px 60px 437px 90px; +} + +input.checkbox:hover +{ + icon-image-s: 437px 467px; +} + +input.checkbox:active +{ + icon-image-s: 467px 497px; +} + +input.checkbox:checked +{ + icon-image-t: 90px 120px; +} + +input.checkbox:checked:hover +{ + icon-image-s: 437px 467px; + icon-image-t: 90px 120px; +} + +input.checkbox:checked:active +{ + icon-image-s: 467px 497px; + icon-image-t: 90px 120px; +} + + + +datagrid datagridheader +{ + width: auto; + height: 25px; + padding: 5px 10px 0px 10px; + + background-decorator: tiled-horizontal; + background-left-image: console.tga 127px 192px 143px 223px; + background-center-image: console.tga stretch 143px 192px 145px 223px; + background-right-image: console.tga 145px 192px 160px 223px; +} + +datagrid datagridbody +{ + color: black; + + margin-left: 4px; + margin-right: 3px; + padding: 0px 4px 4px 4px; +} + + + +datagridexpand +{ + display: block; + + margin: 1px 0px 1px 5px; + height: 17px; + width: 17px; + + icon-decorator: image; + icon-image: console.tga 3px 232px 20px 249px; +} + +datagridexpand:hover +{ + icon-image-s: 21px 38px; +} + +datagridexpand:active +{ + icon-image-s: 39px 56px; +} + +datagridexpand.collapsed +{ + icon-image-t: 250px 267px; +} + + + +scrollbarvertical +{ + margin-top: 1px; + margin-bottom: 3px; + margin-right: 3px; + width: 27px; +} + +scrollbarvertical slidertrack +{ + background-decorator: tiled-vertical; + background-top-image: console.tga 70px 199px 97px 201px; + background-center-image: console.tga stretch 70px 201px 97px 202px; + background-bottom-image: console.tga 70px 203px 97px 204px; +} + +scrollbarvertical sliderbar +{ + margin-left: 4px; + width: 23px; + min-height: 46px; + + background-decorator: tiled-vertical; + background-top-image: console.tga 56px 152px 79px 175px; + background-center-image: console.tga stretch 56px 175px 79px 175px; + background-bottom-image: console.tga 56px 176px 79px 198px; +} + +scrollbarvertical sliderbar:hover +{ + background-top-image-s: 80px 103px; + background-center-image-s: 80px 103px; + background-bottom-image-s: 80px 103px; +} + +scrollbarvertical sliderbar:active +{ + background-top-image-s: 104px 127px; + background-center-image-s: 104px 127px; + background-bottom-image-s: 104px 127px; +} + +scrollbarvertical sliderarrowdec +{ + width: 27px; + height: 24px; + + icon-decorator: image; + icon-image: console.tga 0px 152px 27px 176px; +} + +scrollbarvertical sliderarrowdec:hover, +scrollbarvertical sliderarrowinc:hover +{ + icon-image-t: 177px 201px; +} + +scrollbarvertical sliderarrowdec:active, +scrollbarvertical sliderarrowinc:active +{ + icon-image-t: 202px 226px; +} + +scrollbarvertical sliderarrowinc +{ + width: 27px; + height: 24px; + + icon-decorator: image; + icon-image: console.tga 28px 152px 55px 176px; +} + + + +scrollbarhorizontal +{ + width: 0px; + height: 0px; +} + + diff --git a/uft_dev_server/third_party/RCCPP/Assets/GUI/console.rml b/uft_dev_server/third_party/RCCPP/Assets/GUI/console.rml new file mode 100644 index 0000000..ff2c146 --- /dev/null +++ b/uft_dev_server/third_party/RCCPP/Assets/GUI/console.rml @@ -0,0 +1,28 @@ + + + + + Title + + +
+ + Console + +
+
+
+ + + + + +
+
+ +