19 changed files with 274 additions and 112 deletions
@ -0,0 +1,3 @@ |
|||||||
|
[submodule "cpp_server/RuntimeCompiledCPlusPlus"] |
||||||
|
path = cpp_server/RuntimeCompiledCPlusPlus |
||||||
|
url = https://github.com/RuntimeCompiledCPlusPlus/RuntimeCompiledCPlusPlus.git |
@ -0,0 +1,22 @@ |
|||||||
|
{ |
||||||
|
"configurations": [ |
||||||
|
{ |
||||||
|
"name": "Win32", |
||||||
|
"includePath": [ |
||||||
|
"${workspaceFolder}/**", |
||||||
|
"D:/aigc/vcpkg/installed/x64-windows/include/**" |
||||||
|
], |
||||||
|
"defines": [ |
||||||
|
"_DEBUG", |
||||||
|
"UNICODE", |
||||||
|
"_UNICODE" |
||||||
|
], |
||||||
|
"windowsSdkVersion": "10.0.18362.0", |
||||||
|
"compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe", |
||||||
|
"cStandard": "c11", |
||||||
|
"cppStandard": "c++11", |
||||||
|
"intelliSenseMode": "windows-msvc-x64" |
||||||
|
} |
||||||
|
], |
||||||
|
"version": 4 |
||||||
|
} |
@ -0,0 +1,9 @@ |
|||||||
|
{ |
||||||
|
"cmake.configureOnOpen": true, |
||||||
|
"cmake.buildDirectory": "${workspaceFolder}/build", |
||||||
|
"cmake.generator": "Visual Studio 16 2019 Win64", |
||||||
|
"C_Cpp.default.cppStandard": "c++11", |
||||||
|
"cmake.configureSettings": { |
||||||
|
"CMAKE_TOOLCHAIN_FILE": "D:/aigc/vcpkg/scripts/buildsystems/vcpkg.cmake" |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
cmake_minimum_required(VERSION 3.15) |
||||||
|
project(MyDrogonProject) |
||||||
|
|
||||||
|
# 设置C++11标准 |
||||||
|
set(CMAKE_CXX_STANDARD 11) |
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON) |
||||||
|
|
||||||
|
# 查找依赖 |
||||||
|
find_package(Drogon CONFIG REQUIRED) |
||||||
|
|
||||||
|
# 添加RCC++子模块 |
||||||
|
add_subdirectory(RuntimeCompiledCPlusPlus) |
||||||
|
|
||||||
|
# 定义热重载源文件 |
||||||
|
set(RUNTIME_COMPILED_SOURCES |
||||||
|
src/controllers/UserController.cpp |
||||||
|
) |
||||||
|
|
||||||
|
# 主可执行文件 |
||||||
|
add_executable(${PROJECT_NAME} |
||||||
|
src/main.cpp |
||||||
|
${RUNTIME_COMPILED_SOURCES} |
||||||
|
) |
||||||
|
|
||||||
|
# 配置RCC++ |
||||||
|
runtime_compile_setup( |
||||||
|
TARGET ${PROJECT_NAME} |
||||||
|
SOURCES ${RUNTIME_COMPILED_SOURCES} |
||||||
|
) |
||||||
|
|
||||||
|
# 链接库 |
||||||
|
target_link_libraries(${PROJECT_NAME} PRIVATE Drogon::Drogon) |
||||||
|
|
||||||
|
# 复制Swagger UI |
||||||
|
file(COPY swagger DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) |
@ -0,0 +1 @@ |
|||||||
|
Subproject commit a93b46d32052f16f2f0e647ef180ac92afa88764 |
@ -0,0 +1,7 @@ |
|||||||
|
# 用于查找RCC++的头文件路径 |
||||||
|
find_path(RCCPP_INCLUDE_DIR RuntimeObjectSystem.h |
||||||
|
PATHS ${CMAKE_SOURCE_DIR}/RuntimeCompiledCPlusPlus/RuntimeObjectSystem |
||||||
|
) |
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs) |
||||||
|
find_package_handle_standard_args(RCCPP DEFAULT_MSG RCCPP_INCLUDE_DIR) |
@ -0,0 +1,21 @@ |
|||||||
|
#include "UserController.h" |
||||||
|
|
||||||
|
RCCPP_RUNTIME_TYPE_REGISTRATION(UserController) |
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 获取用户列表 |
||||||
|
* @route GET /api/v1/users |
||||||
|
* @response 200 用户列表JSON |
||||||
|
*/ |
||||||
|
void UserController::asyncHandleHttpRequest( |
||||||
|
const drogon::HttpRequestPtr &req, |
||||||
|
std::function<void(const drogon::HttpResponsePtr &)> &&callback) |
||||||
|
{ |
||||||
|
Json::Value ret; |
||||||
|
ret["status"] = "ok"; |
||||||
|
ret["message"] = "Hello from RCC++!"; |
||||||
|
ret["data"] = Json::arrayValue; |
||||||
|
|
||||||
|
auto resp = drogon::HttpResponse::newHttpJsonResponse(ret); |
||||||
|
callback(resp); |
||||||
|
} |
@ -0,0 +1,22 @@ |
|||||||
|
#pragma once |
||||||
|
|
||||||
|
#include "RuntimeCompiledCPlusPlus/RuntimeObjectSystem/RuntimeObjectSystem.h" |
||||||
|
#include <drogon/HttpSimpleController.h> |
||||||
|
|
||||||
|
class UserController : public RCCpp::IObject, |
||||||
|
public drogon::HttpSimpleController<UserController> |
||||||
|
{ |
||||||
|
public: |
||||||
|
UserController() { RCCpp::Construct(); } |
||||||
|
virtual ~UserController() { RCCpp::Destruct(); } |
||||||
|
|
||||||
|
RCCPP_RUNTIME_TYPE_DECLARATION(UserController) |
||||||
|
|
||||||
|
void asyncHandleHttpRequest( |
||||||
|
const drogon::HttpRequestPtr &req, |
||||||
|
std::function<void(const drogon::HttpResponsePtr &)> &&callback) override; |
||||||
|
|
||||||
|
PATH_LIST_BEGIN |
||||||
|
PATH_ADD("/api/v1/users", drogon::Get); |
||||||
|
PATH_LIST_END |
||||||
|
}; |
@ -0,0 +1,48 @@ |
|||||||
|
#include <drogon/drogon.h> |
||||||
|
#include "RuntimeCompiledCPlusPlus/RuntimeObjectSystem/RuntimeObjectSystem.h" |
||||||
|
#include "controllers/UserController.h" |
||||||
|
|
||||||
|
class SystemTable : public RCCpp::ISystemTable |
||||||
|
{ |
||||||
|
public: |
||||||
|
virtual void Log(RCCpp::LogSystem::LogType type, const char *pText) override |
||||||
|
{ |
||||||
|
if (type == RCCpp::LogSystem::ERROR) |
||||||
|
LOG_ERROR << pText; |
||||||
|
else |
||||||
|
LOG_INFO << pText; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
int main() |
||||||
|
{ |
||||||
|
// 初始化RCC++
|
||||||
|
SystemTable systemTable; |
||||||
|
RCCpp::RuntimeObjectSystem runtimeObjectSystem; |
||||||
|
runtimeObjectSystem.Initialise(&systemTable, nullptr); |
||||||
|
|
||||||
|
// 设置Swagger
|
||||||
|
drogon::app().registerController(std::make_shared<drogon::SwaggerController>()); |
||||||
|
|
||||||
|
// 加载热重载控制器
|
||||||
|
runtimeObjectSystem.GetObjectFactorySystem()->LoadObjectFactory( |
||||||
|
"UserController", true); |
||||||
|
|
||||||
|
// 设置文档路径
|
||||||
|
drogon::app().setDocumentRoot("./swagger"); |
||||||
|
drogon::app().setDocumentRoot("/api/v1/docs"); |
||||||
|
|
||||||
|
// 启动日志
|
||||||
|
LOG_INFO << "Server running on http://127.0.0.1:8848"; |
||||||
|
LOG_INFO << "Swagger UI: http://127.0.0.1:8848/api/v1/docs"; |
||||||
|
LOG_INFO << "Hot reload enabled - modify controller files to see changes"; |
||||||
|
|
||||||
|
// 主循环
|
||||||
|
drogon::app() |
||||||
|
.addListener("0.0.0.0", 8848) |
||||||
|
.setThreadNum(4) |
||||||
|
.run(); |
||||||
|
|
||||||
|
runtimeObjectSystem.CleanObjectFiles(); |
||||||
|
return 0; |
||||||
|
} |
Binary file not shown.
@ -0,0 +1,13 @@ |
|||||||
|
import 'package:win_text_editor/shared/base/base_content_controller.dart'; |
||||||
|
|
||||||
|
class UftFileController extends BaseContentController { |
||||||
|
@override |
||||||
|
void onOpenFile(String filePath) { |
||||||
|
// TODO: implement onOpenFile |
||||||
|
} |
||||||
|
|
||||||
|
@override |
||||||
|
void onOpenFolder(String folderPath) { |
||||||
|
// TODO: implement onOpenFolder |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,47 @@ |
|||||||
|
import 'package:flutter/material.dart'; |
||||||
|
import 'package:provider/provider.dart'; |
||||||
|
import 'package:win_text_editor/framework/controllers/tab_items_controller.dart'; |
||||||
|
import 'package:win_text_editor/modules/uft_file/controllers/uft_file_controller.dart'; |
||||||
|
|
||||||
|
class UftFileView extends StatefulWidget { |
||||||
|
final String tabId; |
||||||
|
const UftFileView({super.key, required this.tabId}); |
||||||
|
|
||||||
|
@override |
||||||
|
State<UftFileView> createState() => _UftFileViewState(); |
||||||
|
} |
||||||
|
|
||||||
|
class _UftFileViewState extends State<UftFileView> { |
||||||
|
late final UftFileController _controller; |
||||||
|
bool _isControllerFromTabManager = false; |
||||||
|
|
||||||
|
get tabManager => Provider.of<TabItemsController>(context, listen: false); |
||||||
|
|
||||||
|
@override |
||||||
|
void initState() { |
||||||
|
super.initState(); |
||||||
|
|
||||||
|
final controllerFromManager = tabManager.getController(widget.tabId); |
||||||
|
if (controllerFromManager != null) { |
||||||
|
_controller = controllerFromManager; |
||||||
|
_isControllerFromTabManager = true; |
||||||
|
} else { |
||||||
|
_controller = UftFileController(); |
||||||
|
_isControllerFromTabManager = false; |
||||||
|
tabManager.registerController(widget.tabId, _controller); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@override |
||||||
|
void dispose() { |
||||||
|
if (!_isControllerFromTabManager) { |
||||||
|
_controller.dispose(); |
||||||
|
} |
||||||
|
super.dispose(); |
||||||
|
} |
||||||
|
|
||||||
|
@override |
||||||
|
Widget build(BuildContext context) { |
||||||
|
return const Center(child: Text('demo')); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue