commit 595a2c97614071fb9ce9287b3745e8eed43b0a20 Author: taynpg Date: Mon Mar 31 20:18:54 2025 +0800 init:初始提交。 diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..402f22e --- /dev/null +++ b/.clang-format @@ -0,0 +1,17 @@ +BasedOnStyle: LLVM +IndentWidth: 4 +PointerAlignment: Left +AccessModifierOffset: -4 +BreakBeforeBraces: Custom +BraceWrapping: + AfterFunction: true + AfterClass: true +Cpp11BracedListStyle: true +ReflowComments: true +SpacesBeforeTrailingComments: 3 +TabWidth: 4 +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ColumnLimit: 80 +AllowShortBlocksOnASingleLine: Never +AllowShortFunctionsOnASingleLine: None +AllowShortEnumsOnASingleLine: false diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5b861d3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +build +.vs +.cache +cmake-* \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..751d02a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,98 @@ +{ + "files.autoSave": "onFocusChange", + "editor.fontSize": 14, + "editor.fontFamily": "'Source Code Pro', 'Source Code Pro', 'Source Code Pro'", + "terminal.integrated.fontFamily": "Source Code Pro", + "cmake.configureOnOpen": true, + "cmake.debugConfig": { + "console": "integratedTerminal", + "setupCommands": [ + { + "description": "-gdb-set charset utf-8", + "text": "-gdb-set charset UTF-8" + }, + { + "description": "Enable gdb pretty-printing", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ], + //"visualizerFile": "${workspaceRoot}/.vscode/qt6.natvis", + "args": [ + ] + }, + "cmake.configureArgs": [ + "-Wno-dev", + "-DCMAKE_PREFIX_PATH:STRING=C:/Dev/wxwidgets" + ], + "cmake.options.statusBarVisibility": "visible", + "cmake.generator": "Ninja", + "C_Cpp.default.compileCommands": "${workspaceRoot}/build/compile_commands.json", + "C_Cpp.default.cppStandard": "c++17", + "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools", + "editor.inlayHints.enabled": "off", + "editor.unicodeHighlight.allowedLocales": { + "ja": true, + "zh-hant": true, + "zh-hans": true + }, + "files.associations": { + "algorithm": "cpp", + "atomic": "cpp", + "bit": "cpp", + "cctype": "cpp", + "charconv": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "compare": "cpp", + "concepts": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "exception": "cpp", + "format": "cpp", + "functional": "cpp", + "hash_map": "cpp", + "initializer_list": "cpp", + "ios": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "iterator": "cpp", + "limits": "cpp", + "list": "cpp", + "locale": "cpp", + "memory": "cpp", + "new": "cpp", + "optional": "cpp", + "ostream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "string": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "typeinfo": "cpp", + "unordered_map": "cpp", + "utility": "cpp", + "vector": "cpp", + "xfacet": "cpp", + "xhash": "cpp", + "xiosbase": "cpp", + "xlocale": "cpp", + "xlocbuf": "cpp", + "xlocinfo": "cpp", + "xlocmes": "cpp", + "xlocmon": "cpp", + "xlocnum": "cpp", + "xloctime": "cpp", + "xmemory": "cpp", + "xstring": "cpp", + "xtr1common": "cpp", + "xutility": "cpp" + } +} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..4f88dd9 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 3.16) + +project(gtransm LANGUAGES CXX) +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +if (MSVC) + add_compile_options(/utf-8) +endif() + +set(CMAKE_DEBUG_POSTFIX "d") +message(STATUS "System: ${CMAKE_SYSTEM_NAME}") +message(STATUS "Compiler CXX ID: ${CMAKE_CXX_COMPILER_ID}") + +set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${CMAKE_BUILD_TYPE}) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE}/) + +add_subdirectory(server-core) +add_subdirectory(example) \ No newline at end of file diff --git a/client-core/CMakeLists.txt b/client-core/CMakeLists.txt new file mode 100644 index 0000000..e69de29 diff --git a/client-core/client-core.cxx b/client-core/client-core.cxx new file mode 100644 index 0000000..e69de29 diff --git a/client-core/client-core.h b/client-core/client-core.h new file mode 100644 index 0000000..e69de29 diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt new file mode 100644 index 0000000..1b793b3 --- /dev/null +++ b/example/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.16) + +project(example LANGUAGES CXX) +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(wxWidgets CONFIG REQUIRED) + +add_executable(server-core-use server-core-use.cxx) +target_link_libraries(server-core-use PRIVATE server-core wx::net) +set_target_properties(server-core-use PROPERTIES WIN32_EXECUTABLE TRUE) \ No newline at end of file diff --git a/example/server-core-use.cxx b/example/server-core-use.cxx new file mode 100644 index 0000000..24e41cf --- /dev/null +++ b/example/server-core-use.cxx @@ -0,0 +1,18 @@ +#include +#include + +class ConsoleApp : public wxApp +{ +public: + bool OnInit() override; +}; + +bool ConsoleApp::OnInit() +{ + CServerCore server; + server.Init("127.0.0.1", 9897); + server.Run(); + return false; +} + +wxIMPLEMENT_APP(ConsoleApp); \ No newline at end of file diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt new file mode 100644 index 0000000..e69de29 diff --git a/gui/main.cxx b/gui/main.cxx new file mode 100644 index 0000000..e69de29 diff --git a/gui/mainframe.cxx b/gui/mainframe.cxx new file mode 100644 index 0000000..e69de29 diff --git a/gui/mainframe.h b/gui/mainframe.h new file mode 100644 index 0000000..e69de29 diff --git a/server-core/CMakeLists.txt b/server-core/CMakeLists.txt new file mode 100644 index 0000000..0603dac --- /dev/null +++ b/server-core/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 3.16) + +project(server-core LANGUAGES CXX) +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(wxWidgets CONFIG REQUIRED) + +set(PSOURCES +server-core.h +server-core.cxx +) + +add_library(server-core STATIC ${PSOURCES}) +target_link_libraries(server-core PRIVATE wx::net wx::core) +target_include_directories(server-core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) \ No newline at end of file diff --git a/server-core/server-core.cxx b/server-core/server-core.cxx new file mode 100644 index 0000000..6a905a5 --- /dev/null +++ b/server-core/server-core.cxx @@ -0,0 +1,48 @@ +#include "server-core.h" + +// https://wizardforcel.gitbooks.io/wxwidgets-book/content/133.html + +CServerCore::CServerCore() +{ +} + +CServerCore::~CServerCore() +{ +} + +bool CServerCore::Init(const wxString& ip, unsigned short port) +{ + wxIPV4address addr; + addr.Service(port); + server_ = std::make_unique(addr, wxSOCKET_NOWAIT); + + if (!server_->IsOk()) { + return false; + } + + server_id_ = wxNewId(); + server_->SetEventHandler(*this, server_id_); + server_->SetNotify(wxSOCKET_CONNECTION_FLAG); // 1. 设置监听的事件类型 + server_->Notify(true); // 2. 启用事件通知 + + Bind(wxEVT_SOCKET, &CServerCore::OnServerEvent, this, server_id_); + return true; +} + +int CServerCore::Run() +{ + wxEventLoop loop; + return loop.Run(); +} + +void CServerCore::OnServerEvent(wxSocketEvent& event) +{ + if (event.GetSocketEvent() == wxSOCKET_CONNECTION) { + auto* cli = server_->Accept(); + if (!cli) { + return; + } + wxString tmp("Nihao"); + cli->Write(tmp.c_str(), tmp.size()); + } +} diff --git a/server-core/server-core.h b/server-core/server-core.h new file mode 100644 index 0000000..259e632 --- /dev/null +++ b/server-core/server-core.h @@ -0,0 +1,28 @@ +#ifndef SERVER_CORE_H +#define SERVER_CORE_H + +#include +#include +#include +#include +#include + +class CServerCore : public wxEvtHandler +{ +public: + CServerCore(); + ~CServerCore(); + +public: + bool Init(const wxString& ip, unsigned short port); + int Run(); + +private: + void OnServerEvent(wxSocketEvent& event); + +private: + std::unique_ptr server_{}; + wxWindowID server_id_{}; +}; + +#endif \ No newline at end of file diff --git a/server/CMakeLists.txt b/server/CMakeLists.txt new file mode 100644 index 0000000..e69de29 diff --git a/server/server.cxx b/server/server.cxx new file mode 100644 index 0000000..e69de29 diff --git a/server/server.h b/server/server.h new file mode 100644 index 0000000..e69de29 diff --git a/util/CMakeLists.txt b/util/CMakeLists.txt new file mode 100644 index 0000000..e69de29 diff --git a/util/gutil.cxx b/util/gutil.cxx new file mode 100644 index 0000000..e69de29 diff --git a/util/gutil.h b/util/gutil.h new file mode 100644 index 0000000..e69de29