@@ -19,6 +19,9 @@ public:
19
19
using async_requests_done_callback_t = CallbackContainer<
20
20
void (ecsact_async_session_id, std::span<ecsact_async_request_id>)>;
21
21
22
+ using async_session_event_callback_t = CallbackContainer<
23
+ void (ecsact_async_session_id, ecsact_async_session_event)>;
24
+
22
25
using system_error_callback_t = CallbackContainer<
23
26
void (ecsact_async_session_id, ecsact_execute_systems_error)>;
24
27
@@ -55,6 +58,17 @@ public:
55
58
return *this ;
56
59
}
57
60
61
+ /* *
62
+ * Set async session event callback. If callback is already set it will be
63
+ * overwritten.
64
+ */
65
+ auto set_async_session_event_callback ( //
66
+ async_requests_done_callback_t callback
67
+ ) -> async_events_collector& {
68
+ _async_session_event_cb = std::move (callback);
69
+ return *this ;
70
+ }
71
+
58
72
auto c () const -> const ecsact_async_events_collector {
59
73
auto evc = ecsact_async_events_collector{};
60
74
auto user_data =
@@ -77,6 +91,12 @@ public:
77
91
evc.async_request_done_callback_user_data = user_data;
78
92
}
79
93
94
+ if (_async_session_event_cb.has_value ()) {
95
+ evc.async_session_event_callback =
96
+ &async_events_collector::async_session_event_callback;
97
+ evc.async_session_event_callback_user_data = user_data;
98
+ }
99
+
80
100
return evc;
81
101
}
82
102
@@ -93,6 +113,7 @@ private:
93
113
std::optional<async_error_callback_t > _async_error_cb;
94
114
std::optional<system_error_callback_t > _system_error_cb;
95
115
std::optional<async_requests_done_callback_t > _async_requests_done_cb;
116
+ std::optional<async_session_event_callback_t > _async_session_event_cb;
96
117
97
118
static void async_error_callback (
98
119
ecsact_async_session_id session_id,
@@ -140,6 +161,18 @@ private:
140
161
self->_async_requests_done_cb .value ()(session_id, request_ids_span);
141
162
}
142
163
}
164
+
165
+ static void async_session_event_callback (
166
+ ecsact_async_session_id session_id,
167
+ ecsact_async_session_event event,
168
+ void * callback_user_data
169
+ ) {
170
+ auto self = static_cast <async_events_collector*>(callback_user_data);
171
+
172
+ if (self->_async_requests_done_cb .has_value ()) {
173
+ self->_async_session_event_cb .value ()(session_id, event);
174
+ }
175
+ }
143
176
};
144
177
145
178
[[nodiscard]] ECSACT_ALWAYS_INLINE auto start () -> ecsact_async_session_id {
0 commit comments