Skip to content

Commit 6a0b119

Browse files
committed
feat: add async session event callback to c++ wrapper
1 parent eba29f8 commit 6a0b119

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

ecsact/runtime/async.hh

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)