@@ -19,6 +19,9 @@ public:
1919 using async_requests_done_callback_t = CallbackContainer<
2020 void (ecsact_async_session_id, std::span<ecsact_async_request_id>)>;
2121
22+ using async_session_event_callback_t = CallbackContainer<
23+ void (ecsact_async_session_id, ecsact_async_session_event)>;
24+
2225 using system_error_callback_t = CallbackContainer<
2326 void (ecsact_async_session_id, ecsact_execute_systems_error)>;
2427
@@ -55,6 +58,17 @@ public:
5558 return *this ;
5659 }
5760
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+
5872 auto c () const -> const ecsact_async_events_collector {
5973 auto evc = ecsact_async_events_collector{};
6074 auto user_data =
@@ -77,6 +91,12 @@ public:
7791 evc.async_request_done_callback_user_data = user_data;
7892 }
7993
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+
80100 return evc;
81101 }
82102
@@ -93,6 +113,7 @@ private:
93113 std::optional<async_error_callback_t > _async_error_cb;
94114 std::optional<system_error_callback_t > _system_error_cb;
95115 std::optional<async_requests_done_callback_t > _async_requests_done_cb;
116+ std::optional<async_session_event_callback_t > _async_session_event_cb;
96117
97118 static void async_error_callback (
98119 ecsact_async_session_id session_id,
@@ -140,6 +161,18 @@ private:
140161 self->_async_requests_done_cb .value ()(session_id, request_ids_span);
141162 }
142163 }
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+ }
143176};
144177
145178[[nodiscard]] ECSACT_ALWAYS_INLINE auto start () -> ecsact_async_session_id {
0 commit comments