Skip to content
This repository was archived by the owner on Aug 16, 2024. It is now read-only.

Commit f25ccaf

Browse files
committed
重构消息反射: GetMessageReflection.
1 parent 4d4540e commit f25ccaf

File tree

2 files changed

+45
-20
lines changed

2 files changed

+45
-20
lines changed

CMakePresets.json

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,27 @@
3333
"MIRAI_CPP_BUILD_EXAMPLES": true
3434
},
3535
"vendor": { "microsoft.com/VisualStudioSettings/CMake/1.0": { "hostOS": [ "Windows" ] } }
36+
},
37+
{
38+
"name": "windows-UintTest",
39+
"displayName": "Windows x64 UintTest",
40+
"description": "Windows x64 UintTest",
41+
"generator": "Ninja",
42+
"binaryDir": "${sourceDir}/out/build/${presetName}",
43+
"architecture": {
44+
"value": "x64",
45+
"strategy": "external"
46+
},
47+
"cacheVariables": {
48+
"CMAKE_BUILD_TYPE": "Debug",
49+
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
50+
"CMAKE_TOOLCHAIN_FILE": {
51+
"value": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
52+
"type": "FILEPATH"
53+
},
54+
"MIRAI_CPP_BUILD_UNIT_TESTS": true
55+
},
56+
"vendor": { "microsoft.com/VisualStudioSettings/CMake/1.0": { "hostOS": [ "Windows" ] } }
3657
}
3758
]
3859
}

src/message_chain.cpp

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,32 @@
55
namespace Cyan
66
{
77

8-
static Cyan::Reflection<IMessage> factory_;
9-
10-
MessageChain::MessageChain() :messages_(), messageId_(0), timestamp_(0)
8+
Cyan::Reflection<IMessage>& GetMessageReflection()
119
{
12-
if (factory_.size() <= 0)
10+
static Cyan::Reflection<IMessage> reflection;
11+
if (reflection.size() <= 0)
1312
{
14-
factory_.Register<PlainMessage>("Plain");
15-
factory_.Register<ImageMessage>("Image");
16-
factory_.Register<FlashImageMessage>("FlashImage");
17-
factory_.Register<AtMessage>("At");
18-
factory_.Register<AtAllMessage>("AtAll");
19-
factory_.Register<AppMessage>("App");
20-
factory_.Register<JsonMessage>("Json");
21-
factory_.Register<XmlMessage>("Xml");
22-
factory_.Register<FaceMessage>("Face");
23-
factory_.Register<PokeMessage>("Poke");
24-
factory_.Register<QuoteMessage>("Quote");
25-
factory_.Register<FileMessage>("File");
26-
factory_.Register<DiceMessage>("Dice");
27-
factory_.Register<ForwardMessage>("Forward");
28-
factory_.Register<MusicShare>("MusicShare");
13+
reflection.Register<PlainMessage>("Plain");
14+
reflection.Register<ImageMessage>("Image");
15+
reflection.Register<FlashImageMessage>("FlashImage");
16+
reflection.Register<AtMessage>("At");
17+
reflection.Register<AtAllMessage>("AtAll");
18+
reflection.Register<AppMessage>("App");
19+
reflection.Register<JsonMessage>("Json");
20+
reflection.Register<XmlMessage>("Xml");
21+
reflection.Register<FaceMessage>("Face");
22+
reflection.Register<PokeMessage>("Poke");
23+
reflection.Register<QuoteMessage>("Quote");
24+
reflection.Register<FileMessage>("File");
25+
reflection.Register<DiceMessage>("Dice");
26+
reflection.Register<ForwardMessage>("Forward");
27+
reflection.Register<MusicShare>("MusicShare");
2928
}
29+
return reflection;
30+
}
31+
32+
MessageChain::MessageChain() :messages_(), messageId_(0), timestamp_(0)
33+
{
3034
}
3135

3236
MessageChain::MessageChain(const MessageChain& mc)
@@ -157,7 +161,7 @@ namespace Cyan
157161
// 因此从 0 开始,防止漏掉消息
158162
for (size_t i = 0; i < j.size(); i++)
159163
{
160-
auto msg_ptr = factory_.DynamicCreate(j[i]["type"]);
164+
auto msg_ptr = GetMessageReflection().DynamicCreate(j[i]["type"]);
161165
if (msg_ptr)
162166
{
163167
msg_ptr->Set(j[i]);

0 commit comments

Comments
 (0)