Skip to content

Commit 7a32f21

Browse files
authored
Merge pull request #32 from lkpworkspace/dev
v0.9.3 - feature: - 模版工程隐藏符号,仅导出actor_create/worker_create - optimization: - 优化智能指针访问 - api: - Actor.Subscribe新增消息类型参数 - other: - 新增依赖下载安装脚本 - windows默认使用utf-8编译源码
2 parents 2f4bf72 + 00109d9 commit 7a32f21

32 files changed

+260
-149
lines changed

.github/workflows/linux.yml

+5-1
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,11 @@ jobs:
4343
if: steps.cache-jsoncpp.outputs.cache-hit != 'true'
4444
run: |
4545
cmake -S jsoncpp-1.9.5 -B build-jsoncpp \
46+
-DBUILD_SHARED_LIBS=ON \
47+
-DBUILD_STATIC_LIBS=OFF \
48+
-DBUILD_OBJECT_LIBS=OFF \
4649
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
4750
-DCMAKE_INSTALL_PREFIX=${{github.workspace}}/jsoncpp \
48-
-DBUILD_OBJECT_LIBS=OFF \
4951
-DJSONCPP_WITH_TESTS=OFF \
5052
-DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF \
5153
-DJSONCPP_WITH_PKGCONFIG_SUPPORT=OFF \
@@ -69,6 +71,7 @@ jobs:
6971
if: steps.cache-glog.outputs.cache-hit != 'true'
7072
run: |
7173
cmake -S glog-0.6.0 -B build-glog \
74+
-DBUILD_SHARED_LIBS=ON \
7275
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
7376
-DCMAKE_INSTALL_PREFIX=${{github.workspace}}/glog \
7477
-DWITH_PKGCONFIG=OFF \
@@ -85,6 +88,7 @@ jobs:
8588
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
8689
run: |
8790
cmake -S . -B ${{github.workspace}}/build_${{matrix.build_type}} \
91+
-DBUILD_SHARED_LIBS=ON \
8892
-DCMAKE_CXX_STANDARD=${{matrix.std}} \
8993
-DCMAKE_CXX_STANDARD_REQUIRED=ON \
9094
-DMYFRAME_USE_CV=OFF \

.github/workflows/macos.yml

+4-1
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,11 @@ jobs:
4343
if: steps.cache-jsoncpp.outputs.cache-hit != 'true'
4444
run: |
4545
cmake -S jsoncpp-1.9.5 -B build-jsoncpp \
46+
-DBUILD_SHARED_LIBS=ON \
47+
-DBUILD_STATIC_LIBS=OFF \
48+
-DBUILD_OBJECT_LIBS=OFF \
4649
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
4750
-DCMAKE_INSTALL_PREFIX=${{github.workspace}}/jsoncpp \
48-
-DBUILD_OBJECT_LIBS=OFF \
4951
-DJSONCPP_WITH_TESTS=OFF \
5052
-DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF \
5153
-DJSONCPP_WITH_PKGCONFIG_SUPPORT=OFF \
@@ -94,6 +96,7 @@ jobs:
9496
if: steps.cache-glog.outputs.cache-hit != 'true'
9597
run: |
9698
cmake -S glog-0.6.0 -B build-glog \
99+
-DBUILD_SHARED_LIBS=ON \
97100
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
98101
-DWITH_PKGCONFIG=OFF \
99102
-DWITH_GTEST=OFF \

.github/workflows/windows.yml

+42-39
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,18 @@ jobs:
4747
if: steps.cache-jsoncpp.outputs.cache-hit != 'true'
4848
run: |
4949
cmake -S jsoncpp-1.9.5 -B build-jsoncpp `
50-
-A ${{matrix.arch}} `
51-
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} `
52-
-DCMAKE_INSTALL_PREFIX=${{github.workspace}}/jsoncpp `
53-
-DBUILD_OBJECT_LIBS=OFF `
54-
-DJSONCPP_WITH_TESTS=OFF `
55-
-DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF `
56-
-DJSONCPP_WITH_PKGCONFIG_SUPPORT=OFF
50+
-A ${{matrix.arch}} `
51+
-DBUILD_SHARED_LIBS=ON `
52+
-DBUILD_STATIC_LIBS=OFF `
53+
-DBUILD_OBJECT_LIBS=OFF `
54+
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} `
55+
-DCMAKE_INSTALL_PREFIX=${{github.workspace}}/jsoncpp `
56+
-DJSONCPP_WITH_TESTS=OFF `
57+
-DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF `
58+
-DJSONCPP_WITH_PKGCONFIG_SUPPORT=OFF
5759
cmake --build build-jsoncpp `
58-
--config ${{matrix.build_type}} `
59-
--target install
60+
--config ${{matrix.build_type}} `
61+
--target install
6062
6163
- name: Cache gflags
6264
id: cache-gflags
@@ -75,12 +77,12 @@ jobs:
7577
if: steps.cache-gflags.outputs.cache-hit != 'true'
7678
run: |
7779
cmake -S gflags-2.2.2 -B build-gflags `
78-
-A ${{matrix.arch}} `
79-
-DBUILD_SHARED_LIBS=ON `
80-
-DCMAKE_INSTALL_PREFIX=${{github.workspace}}/gflags
80+
-A ${{matrix.arch}} `
81+
-DBUILD_SHARED_LIBS=ON `
82+
-DCMAKE_INSTALL_PREFIX=${{github.workspace}}/gflags
8183
cmake --build build-gflags `
82-
--config ${{matrix.build_type}} `
83-
--target install
84+
--config ${{matrix.build_type}} `
85+
--target install
8486
8587
- name: Cache glog
8688
id: cache-glog
@@ -99,39 +101,40 @@ jobs:
99101
if: steps.cache-glog.outputs.cache-hit != 'true'
100102
run: |
101103
cmake -S glog-0.6.0 -B build-glog `
102-
-A ${{matrix.arch}} `
103-
-DBUILD_SHARED_LIBS=ON `
104-
-DWITH_GTEST=OFF `
105-
-DWITH_PKGCONFIG=OFF `
106-
-DCMAKE_PREFIX_PATH="${{github.workspace}}/gflags" `
107-
-DCMAKE_INSTALL_PREFIX=${{github.workspace}}/glog
104+
-A ${{matrix.arch}} `
105+
-DBUILD_SHARED_LIBS=ON `
106+
-DWITH_GTEST=OFF `
107+
-DWITH_PKGCONFIG=OFF `
108+
-DCMAKE_PREFIX_PATH="${{github.workspace}}/gflags" `
109+
-DCMAKE_INSTALL_PREFIX=${{github.workspace}}/glog
108110
cmake --build build-glog `
109-
--config ${{matrix.build_type}} `
110-
--target install
111+
--config ${{matrix.build_type}} `
112+
--target install
111113
112114
- name: Configure
113115
run: |
114116
cmake -S . -B build_${{matrix.build_type}} `
115-
-A ${{matrix.arch}} `
116-
-DMYFRAME_USE_CV=ON `
117-
-DBUILD_SHARED_LIBS=ON `
118-
-DCMAKE_CXX_EXTENSIONS=OFF `
119-
-DCMAKE_CXX_STANDARD=${{matrix.std}} `
120-
-DCMAKE_CXX_STANDARD_REQUIRED=ON `
121-
-DCMAKE_EXE_LINKER_FLAGS='/NOIMPLIB' `
122-
-DCMAKE_EXE_LINKER_FLAGS_RELEASE='/INCREMENTAL:NO /DEBUG' `
123-
-DCMAKE_INSTALL_PREFIX=${{github.workspace}}/myframe `
124-
-DCMAKE_PREFIX_PATH="${{github.workspace}}/jsoncpp;${{github.workspace}}/glog;${{github.workspace}}/gflags" `
125-
-DCMAKE_MSVC_RUNTIME_LIBRARY='MultiThreaded$<$<CONFIG:Debug>:Debug>DLL' `
126-
-G "${{matrix.generator}}" `
127-
-Werror
117+
-A ${{matrix.arch}} `
118+
-DMYFRAME_USE_CV=ON `
119+
-DBUILD_SHARED_LIBS=ON `
120+
-DCMAKE_CXX_EXTENSIONS=OFF `
121+
-DCMAKE_CXX_STANDARD=${{matrix.std}} `
122+
-DCMAKE_CXX_STANDARD_REQUIRED=ON `
123+
-DCMAKE_EXE_LINKER_FLAGS='/NOIMPLIB' `
124+
-DCMAKE_EXE_LINKER_FLAGS_RELEASE='/INCREMENTAL:NO /DEBUG' `
125+
-DCMAKE_INSTALL_PREFIX=${{github.workspace}}/myframe `
126+
-DCMAKE_PREFIX_PATH="${{github.workspace}}/jsoncpp;${{github.workspace}}/glog;${{github.workspace}}/gflags" `
127+
-DCMAKE_MSVC_RUNTIME_LIBRARY='MultiThreaded$<$<CONFIG:Debug>:Debug>DLL' `
128+
-G "${{matrix.generator}}" `
129+
-Werror
128130
129131
- name: Build
130-
run: cmake --build build_${{matrix.build_type}} `
131-
--config ${{matrix.build_type}}
132+
run: |
133+
cmake --build build_${{matrix.build_type}} `
134+
--config ${{matrix.build_type}}
132135
133136
- name: Install
134137
run: |
135138
cmake --build build_${{matrix.build_type}} `
136-
--config ${{matrix.build_type}} `
137-
--target install
139+
--config ${{matrix.build_type}} `
140+
--target install

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,7 @@ launcher/launcher_config.h
1515
test/performance_test_config.h
1616
myframe/export.h
1717
myframe/config.h
18+
3rd/pkg/
19+
3rd/src/
20+
3rd/build/
21+
output/

3rd/CMakeLists.txt

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
cmake_minimum_required(VERSION 3.10)
2+
if (POLICY CMP0091)
3+
cmake_policy(SET CMP0091 NEW)
4+
endif()
5+
project(myframe_deps VERSION 1.0.0)
6+
7+
include(ExternalProject)
8+
9+
set(DEPS_SOURCE_DIR ${CMAKE_SOURCE_DIR}/src)
10+
set(DEPS_DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/pkg)
11+
12+
ExternalProject_Add(
13+
gflags
14+
URL https://github.com/gflags/gflags/archive/refs/tags/v2.2.2.tar.gz
15+
URL_MD5 1a865b93bacfa963201af3f75b7bd64c
16+
DOWNLOAD_NAME "gflags.tar.gz"
17+
PREFIX ${CMAKE_BINARY_DIR}
18+
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}
19+
SOURCE_DIR "${DEPS_SOURCE_DIR}/gflags"
20+
UPDATE_COMMAND ""
21+
PATCH_COMMAND ""
22+
CMAKE_ARGS
23+
-DBUILD_SHARED_LIBS=ON
24+
-DCMAKE_BUILD_TYPE=Release
25+
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
26+
)
27+
28+
ExternalProject_Add(
29+
glog
30+
URL https://github.com/google/glog/archive/refs/tags/v0.6.0.tar.gz
31+
URL_MD5 c98a6068bc9b8ad9cebaca625ca73aa2
32+
DOWNLOAD_NAME "glog.tar.gz"
33+
PREFIX ${CMAKE_BINARY_DIR}
34+
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}
35+
SOURCE_DIR "${DEPS_SOURCE_DIR}/glog"
36+
UPDATE_COMMAND ""
37+
PATCH_COMMAND ""
38+
CMAKE_ARGS
39+
-DBUILD_SHARED_LIBS=ON
40+
-DCMAKE_BUILD_TYPE=Release
41+
-DWITH_PKGCONFIG=OFF
42+
-DWITH_GTEST=OFF
43+
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
44+
-DCMAKE_PREFIX_PATH=${CMAKE_INSTALL_PREFIX}
45+
)
46+
ExternalProject_Add_StepDependencies(glog install gflags)
47+
48+
ExternalProject_Add(
49+
jsoncpp
50+
URL https://github.com/open-source-parsers/jsoncpp/archive/refs/tags/1.9.5.tar.gz
51+
URL_MD5 d6c8c609f2162eff373db62b90a051c7
52+
DOWNLOAD_NAME "jsoncpp.tar.gz"
53+
PREFIX ${CMAKE_BINARY_DIR}
54+
DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}
55+
SOURCE_DIR "${DEPS_SOURCE_DIR}/jsoncpp"
56+
UPDATE_COMMAND ""
57+
PATCH_COMMAND ""
58+
CMAKE_ARGS
59+
-DBUILD_SHARED_LIBS=ON
60+
-DBUILD_STATIC_LIBS=OFF
61+
-DBUILD_OBJECT_LIBS=OFF
62+
-DCMAKE_BUILD_TYPE=Release
63+
-DJSONCPP_WITH_TESTS=OFF
64+
-DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF
65+
-DJSONCPP_WITH_PKGCONFIG_SUPPORT=OFF
66+
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
67+
)

3rd/README.md

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# 3rd
2+
该目录主要用于下载/构建/安装依赖包使用

CMakeLists.txt

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
cmake_minimum_required(VERSION 3.10)
2-
project(myframe VERSION 0.9.2)
2+
if (POLICY CMP0091)
3+
cmake_policy(SET CMP0091 NEW)
4+
endif()
5+
project(myframe VERSION 0.9.3)
36

47
### option
58
option(MYFRAME_USE_CV "Using conditional variables for thread communication" ON)
@@ -13,15 +16,16 @@ set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
1316
### compile option
1417
set(CMAKE_C_VISIBILITY_PRESET hidden)
1518
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
16-
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
1719
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
20+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
1821
if (CMAKE_CXX_STANDARD_REQUIRED)
1922
message(STATUS "Set cxx standard ${CMAKE_CXX_STANDARD}")
2023
else()
2124
set(CMAKE_CXX_STANDARD_REQUIRED ON)
2225
set(CMAKE_CXX_STANDARD 17)
2326
message(STATUS "Set default cxx standard 17")
2427
endif()
28+
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>")
2529

2630
### install path
2731
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)

README.md

+13-1
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,23 @@ worker自驱动,可以通过消息与actor交互;
2020
| Windows |
2121
| macOS |
2222

23-
## 构建
23+
## github构建
2424
* [github ci linux](.github/workflows/linux.yml)
2525
* [github ci windows](.github/workflows/windows.yml)
2626
* [github ci macOS](.github/workflows/macos.yml)
2727

28+
## 快速本地构建
29+
```sh
30+
# 下载/构建/安装依赖库
31+
cd 3rd
32+
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=../output
33+
cmake --build build -j
34+
# 构建安装
35+
cd ..
36+
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=./output -DCMAKE_PREFIX_PATH=./output
37+
cmake --build build -j --config Release --target install
38+
```
39+
2840
### Hello,World 示例
2941
```c
3042
#include <string.h>

myframe/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ target_link_libraries(${PROJECT_NAME}
2020
PUBLIC
2121
Threads::Threads
2222
glog::glog
23-
jsoncpp_lib
23+
JsonCpp::JsonCpp
2424
)
2525
set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION})
2626
set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR})

myframe/actor.cpp

+14-16
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Author: 李柯鹏 <[email protected]>
66
****************************************************************************/
77

88
#include "myframe/actor.h"
9+
#include <utility>
910

1011
#include "myframe/log.h"
1112
#include "myframe/app.h"
@@ -33,11 +34,10 @@ const std::string& Actor::GetModName() const {
3334
bool Actor::IsFromLib() const { return is_from_lib_; }
3435

3536
Mailbox* Actor::GetMailbox() {
36-
auto ctx = ctx_.lock();
37-
if (ctx == nullptr) {
37+
if (ctx_ == nullptr) {
3838
return nullptr;
3939
}
40-
return ctx->GetMailbox();
40+
return ctx_->GetMailbox();
4141
}
4242

4343
const std::string& Actor::GetTypeName() const { return actor_name_; }
@@ -53,12 +53,11 @@ void Actor::SetTypeName(const std::string& name) { actor_name_ = name; }
5353
void Actor::SetInstName(const std::string& name) { instance_name_ = name; }
5454

5555
int Actor::Timeout(const std::string& timer_name, int expired) {
56-
auto ctx = ctx_.lock();
57-
if (ctx == nullptr) {
56+
if (ctx_ == nullptr) {
5857
LOG(ERROR) << "actor context is nullptr";
5958
return -1;
6059
}
61-
auto app = ctx->GetApp();
60+
auto app = ctx_->GetApp();
6261
if (app == nullptr) {
6362
LOG(ERROR) << "app is nullptr";
6463
return -1;
@@ -71,22 +70,22 @@ int Actor::Timeout(const std::string& timer_name, int expired) {
7170
return timer_worker->SetTimeout(GetActorName(), timer_name, expired);
7271
}
7372

74-
bool Actor::Subscribe(const std::string& name) {
75-
auto ctx = ctx_.lock();
76-
if (ctx == nullptr) {
73+
bool Actor::Subscribe(const std::string& addr, const std::string& msg_type) {
74+
if (ctx_ == nullptr) {
7775
return false;
7876
}
79-
if (name == GetActorName()) {
77+
if (addr == GetActorName()) {
8078
return false;
8179
}
8280
auto msg = std::make_shared<Msg>();
8381
msg->SetType("SUBSCRIBE");
84-
auto mailbox = ctx->GetMailbox();
85-
mailbox->Send(name, msg);
82+
msg->SetDesc(msg_type);
83+
auto mailbox = ctx_->GetMailbox();
84+
mailbox->Send(addr, std::move(msg));
8685
return true;
8786
}
8887

89-
void Actor::SetContext(std::shared_ptr<ActorContext> c) { ctx_ = c; }
88+
void Actor::SetContext(ActorContext* c) { ctx_ = c; }
9089

9190
const Json::Value* Actor::GetConfig() const {
9291
return &config_;
@@ -97,11 +96,10 @@ void Actor::SetConfig(const Json::Value& conf) {
9796
}
9897

9998
std::shared_ptr<App> Actor::GetApp() {
100-
auto ctx = ctx_.lock();
101-
if (ctx == nullptr) {
99+
if (ctx_ == nullptr) {
102100
return nullptr;
103101
}
104-
return ctx->GetApp();
102+
return ctx_->GetApp();
105103
}
106104

107105
} // namespace myframe

0 commit comments

Comments
 (0)