SW Task Event Loop Framework v1.0.0
High-performance C++ asynchronous event loop framework with timer management and promise-based programming
Loading...
Searching...
No Matches
Message.cpp
Go to the documentation of this file.
1#include "Message.h"
2#include "Handler.h"
3
4namespace swt {
5
7 what(0),
8 arg1(0),
9 arg2(0),
10 arg3(0),
11 obj(NULL),
12 obj_size(0),
13 whenUs(0)
14{
15 mNextMessage = NULL;
16 mHandler = NULL;
17 //post = NULL;
18 spRef = NULL;
19}
20
22 what(0),
23 arg1(0),
24 arg2(0),
25 arg3(0),
26 obj(NULL),
27 obj_size(0),
28 whenUs(0),
29 spRef(NULL)
30{
31 setTo(other);
32}
33
37
38std::shared_ptr<Message> Message::obtain()
39{
40 auto msg = std::make_shared<Message>();
41 return msg;
42}
43
44std::shared_ptr<Message> Message::obtain(const std::shared_ptr<Handler>& handler)
45{
46 std::shared_ptr<Message> message = obtain();
47 message->mHandler = handler;
48 return message;
49}
50
51std::shared_ptr<Message> Message::obtain(const std::shared_ptr<Handler>& handler, int32_t obtain_what)
52{
53 std::shared_ptr<Message> message = obtain();
54 message->mHandler = handler;
55 message->what = obtain_what;
56 return message;
57}
58
59std::shared_ptr<Message> Message::obtain(const std::shared_ptr<Handler>& handler, int32_t obtain_what
60 , int32_t obtain_arg1)
61{
62 std::shared_ptr<Message> message = obtain();
63 message->mHandler = handler;
64 message->what = obtain_what;
65 message->arg1 = obtain_arg1;
66 return message;
67}
68
69std::shared_ptr<Message> Message::obtain(const std::shared_ptr<Handler>& handler, int32_t obtain_what
70 , void* obtain_obj)
71{
72 std::shared_ptr<Message> message = obtain();
73 message->mHandler = handler;
74 message->what = obtain_what;
75 message->obj = obtain_obj;
76 return message;
77}
78
79
80std::shared_ptr<Message> Message::obtain(const std::shared_ptr<Handler>& handler, int32_t obtain_what
81 , int32_t obtain_arg1, int32_t obtain_arg2)
82{
83 std::shared_ptr<Message> message = obtain();
84 message->mHandler = handler;
85 message->what = obtain_what;
86 message->arg1 = obtain_arg1;
87 message->arg2 = obtain_arg2;
88 return message;
89}
90
91
92std::shared_ptr<Message> Message::obtain(const std::shared_ptr<Handler>& handler, int32_t obtain_what
93 , int32_t obtain_arg1, int32_t obtain_arg2, void* obtain_obj)
94{
95 std::shared_ptr<Message> message = obtain();
96 message->mHandler = handler;
97 message->what = obtain_what;
98 message->arg1 = obtain_arg1;
99 message->arg2 = obtain_arg2;
100 message->obj = obtain_obj;
101 return message;
102}
103
104
105std::shared_ptr<Message> Message::obtain(const std::shared_ptr<Handler>& handler, int32_t obtain_what
106 , int32_t obtain_arg1, int32_t obtain_arg2, int32_t obtain_arg3)
107{
108 std::shared_ptr<Message> message = obtain();
109 message->mHandler = handler;
110 message->what = obtain_what;
111 message->arg1 = obtain_arg1;
112 message->arg2 = obtain_arg2;
113 message->arg3 = obtain_arg3;
114 return message;
115}
116
117std::shared_ptr<Message> Message::obtain(const Message* message)
118{
119 std::shared_ptr<Message> dupMessage = obtain();
120 dupMessage->what = message->what;
121 dupMessage->arg1 = message->arg1;
122 dupMessage->arg2 = message->arg2;
123 dupMessage->arg3 = message->arg3;
124 dupMessage->obj = message->obj;
125 dupMessage->spRef = message->spRef;
126 dupMessage->whenUs = 0;
127 dupMessage->mHandler = message->mHandler;
128 dupMessage->mNextMessage = NULL;
129 return dupMessage;
130}
131
132
133std::shared_ptr<Message> Message::obtain(const std::shared_ptr<Handler>& handler, int32_t obtain_what
134 , std::shared_ptr<RefBase> obtain_spRef)
135{
136 std::shared_ptr<Message> message = obtain();
137 message->mHandler = handler;
138 message->what = obtain_what;
139 message->spRef= obtain_spRef;
140 return message;
141}
142
143
144
145
147{
148 if (mHandler != NULL) {
149 try {
150 // ✅ SAFE: Sử dụng shared_from_this()
151 return mHandler->sendMessage(shared_from_this());
152 } catch (const std::bad_weak_ptr& e) {
153 // Message không được tạo từ shared_ptr
154 std::cerr << "Error: Message not managed by shared_ptr" << std::endl;
155 return false;
156 }
157 } else {
158 //cout<<"sendToTarget handler is NULL\n";
159 return false;
160 }
161}
162
163std::shared_ptr<Message> Message::dup() const
164{
165 return Message::obtain(this);
166}
167
169{
170 what = 0;
171 arg1 = 0;
172 arg2 = 0;
173 arg3 = 0;
174 obj = NULL;
175 obj_size = 0;
176 whenUs = 0;
177 mNextMessage = NULL;
178 mHandler = NULL;
179 //post = NULL;
180 spRef = NULL;
181}
182
183
185{
186 setTo(other);
187 return *this;
188}
189
190void Message::setTo(const Message& other)
191{
192 if(this != &other)
193 {
194 what = other.what;
195 arg1 = other.arg1;
196 arg2 = other.arg2;
197 arg3 = other.arg3;
198 obj = other.obj;
199 obj_size = other.obj_size;
200 whenUs = other.whenUs;
201 //post = other.post;
202 spRef = other.spRef;
203 }
204}
205} // namespace swt
206
207
Message object for event-driven communication between threads and handlers.
Definition Message.h:38
std::shared_ptr< Message > dup() const
Create a deep copy of this message.
Definition Message.cpp:163
void setTo(const Message &other)
Set this message to another message's contents.
Definition Message.cpp:190
std::shared_ptr< RefBase > spRef
Smart pointer reference.
Definition Message.h:212
virtual ~Message()
Virtual destructor.
Definition Message.cpp:34
Message()
Default constructor - creates empty message.
Definition Message.cpp:6
bool sendToTarget()
Send this message to its target handler.
Definition Message.cpp:146
ssize_t obj_size
Size of object (if applicable)
Definition Message.h:211
Message & operator=(const Message &other)
Assignment operator - deep copy from another message.
Definition Message.cpp:184
std::shared_ptr< Message > mNextMessage
Next message in queue.
Definition Message.h:203
void clear()
Clear all fields in the message.
Definition Message.cpp:168
std::shared_ptr< Handler > mHandler
Target handler.
Definition Message.h:202
int32_t arg3
Third argument.
Definition Message.h:208
int32_t what
Message type code.
Definition Message.h:205
int32_t arg2
Second argument.
Definition Message.h:207
void * obj
Raw object pointer.
Definition Message.h:210
int32_t arg1
First argument.
Definition Message.h:206
static std::shared_ptr< Message > obtain()
Obtain a new empty message.
Definition Message.cpp:38
Software Timer namespace containing all timer-related classes.
Definition Awaitable.h:21