@@ -14,13 +14,13 @@ template<
1414class async_events_collector {
1515public:
1616 using async_error_callback_t = CallbackContainer<
17- void (ecsact_async_error, std::span<ecsact_async_request_id>)>;
17+ void (ecsact_async_session_id, ecsact_async_error, std::span<ecsact_async_request_id>)>;
1818
19- using async_requests_done_callback_t =
20- CallbackContainer< void (std::span<ecsact_async_request_id>)>;
19+ using async_requests_done_callback_t = CallbackContainer<
20+ void (ecsact_async_session_id, std::span<ecsact_async_request_id>)>;
2121
22- using system_error_callback_t =
23- CallbackContainer< void (ecsact_execute_systems_error)>;
22+ using system_error_callback_t = CallbackContainer<
23+ void (ecsact_async_session_id, ecsact_execute_systems_error)>;
2424
2525 /* *
2626 * Set async error callback. If callback is already set it will be
@@ -95,6 +95,7 @@ private:
9595 std::optional<async_requests_done_callback_t > _async_requests_done_cb;
9696
9797 static void async_error_callback (
98+ ecsact_async_session_id session_id,
9899 ecsact_async_error async_err,
99100 int request_ids_length,
100101 ecsact_async_request_id* request_ids,
@@ -107,22 +108,24 @@ private:
107108 request_ids,
108109 static_cast <size_t >(request_ids_length),
109110 };
110- self->_async_error_cb .value ()(async_err, request_ids_span);
111+ self->_async_error_cb .value ()(session_id, async_err, request_ids_span);
111112 }
112113 }
113114
114115 static void system_error_callback (
116+ ecsact_async_session_id session_id,
115117 ecsact_execute_systems_error err,
116118 void * callback_user_data
117119 ) {
118120 auto self = static_cast <async_events_collector*>(callback_user_data);
119121
120122 if (self->_system_error_cb .has_value ()) {
121- self->_system_error_cb .value ()(err);
123+ self->_system_error_cb .value ()(session_id, err);
122124 }
123125 }
124126
125127 static void async_requests_done_callback (
128+ ecsact_async_session_id session_id,
126129 int request_ids_length,
127130 ecsact_async_request_id* request_ids,
128131 void * callback_user_data
@@ -134,20 +137,20 @@ private:
134137 request_ids,
135138 static_cast <size_t >(request_ids_length),
136139 };
137- self->_async_requests_done_cb .value ()(request_ids_span);
140+ self->_async_requests_done_cb .value ()(session_id, request_ids_span);
138141 }
139142 }
140143};
141144
142145[[nodiscard]] ECSACT_ALWAYS_INLINE auto start () -> ecsact_async_session_id {
143- return ecsact_async_start (0 , nullptr );
146+ return ecsact_async_start (nullptr , 0 );
144147}
145148
146149[[nodiscard]] ECSACT_ALWAYS_INLINE auto start ( //
147- int32_t size ,
148- const void * data
150+ const void * data ,
151+ int32_t size
149152) -> ecsact_async_session_id {
150- return ecsact_async_start (size, data );
153+ return ecsact_async_start (data, size );
151154}
152155
153156ECSACT_ALWAYS_INLINE auto stop (ecsact_async_session_id id) -> void {
@@ -167,39 +170,44 @@ ECSACT_ALWAYS_INLINE auto stop(ecsact_async_session_id id) -> void {
167170 return ecsact_async_enqueue_execution_options (id, options.c ());
168171}
169172
170- ECSACT_ALWAYS_INLINE auto flush_events () -> void {
171- ecsact_async_flush_events (nullptr , nullptr );
173+ ECSACT_ALWAYS_INLINE auto flush_events ( //
174+ ecsact_async_session_id session_id
175+ ) -> void {
176+ ecsact_async_flush_events (session_id, nullptr , nullptr );
172177}
173178
174179template <typename ExecutionEventsCollector>
175180 requires (std::convertible_to<
176- decltype (std::declval<ExecutionEventsCollector>().c()),
177- const ecsact_execution_events_collector>)
181+ decltype (std::declval<ExecutionEventsCollector>().c()),
182+ const ecsact_execution_events_collector>)
178183ECSACT_ALWAYS_INLINE auto flush_events( //
184+ ecsact_async_session_id session_id,
179185 ExecutionEventsCollector&& evc
180186) -> void {
181187 const ecsact_execution_events_collector evc_c = evc.c ();
182- ecsact_async_flush_events (&evc_c, nullptr );
188+ ecsact_async_flush_events (session_id, &evc_c, nullptr );
183189}
184190
185191template <typename AsyncEventsCollector>
186192 requires (std::convertible_to<
187- decltype (std::declval<AsyncEventsCollector>().c()),
188- const ecsact_async_events_collector>)
193+ decltype (std::declval<AsyncEventsCollector>().c()),
194+ const ecsact_async_events_collector>)
189195ECSACT_ALWAYS_INLINE auto flush_events( //
190- AsyncEventsCollector&& async_evc
196+ ecsact_async_session_id session_id,
197+ AsyncEventsCollector&& async_evc
191198) -> void {
192199 const ecsact_async_events_collector async_evc_c = async_evc.c ();
193- ecsact_async_flush_events (nullptr , &async_evc_c);
200+ ecsact_async_flush_events (session_id, nullptr , &async_evc_c);
194201}
195202
196203template <typename ExecutionEventsCollector, typename AsyncEventsCollector>
197204ECSACT_ALWAYS_INLINE auto flush_events (
205+ ecsact_async_session_id session_id,
198206 ExecutionEventsCollector&& evc,
199207 AsyncEventsCollector&& async_evc
200208) -> void {
201209 const ecsact_execution_events_collector evc_c = evc.c ();
202210 const ecsact_async_events_collector async_evc_c = async_evc.c ();
203- ecsact_async_flush_events (&evc_c, &async_evc_c);
211+ ecsact_async_flush_events (session_id, &evc_c, &async_evc_c);
204212}
205213} // namespace ecsact::async
0 commit comments