aboutsummaryrefslogtreecommitdiffstats
path: root/src/core/module/Event.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/module/Event.cpp')
-rw-r--r--src/core/module/Event.cpp27
1 files changed, 26 insertions, 1 deletions
diff --git a/src/core/module/Event.cpp b/src/core/module/Event.cpp
index 2fcccbc4..020f5c69 100644
--- a/src/core/module/Event.cpp
+++ b/src/core/module/Event.cpp
@@ -36,10 +36,13 @@ class Event::Impl {
public:
Impl(std::string event_id, std::initializer_list<ParameterInitializer> params,
EventCallback callback)
- : event_identifier_(std::move(event_id)), callback_(std::move(callback)) {
+ : event_identifier_(std::move(event_id)),
+ callback_(std::move(callback)),
+ callback_thread_(QThread::currentThread()) {
for (const auto& param : params) {
AddParameter(param);
}
+ SPDLOG_DEBUG("create event {}", event_identifier_);
}
auto operator[](const std::string& key) const
@@ -75,10 +78,28 @@ class Event::Impl {
AddParameter(param.key, param.value);
}
+ void ExecuteCallback(ListenerIdentifier listener_id,
+ const DataObjectPtr& data_object) {
+ if (callback_) {
+ SPDLOG_DEBUG("execute callback for event {} with listener {}",
+ event_identifier_, listener_id);
+ if (!QMetaObject::invokeMethod(
+ callback_thread_,
+ [callback = callback_, event_identifier = event_identifier_,
+ listener_id, data_object]() {
+ callback(event_identifier, listener_id, data_object);
+ })) {
+ SPDLOG_ERROR("failed to invoke callback for event {} with listener {}",
+ event_identifier_, listener_id);
+ }
+ }
+ }
+
private:
EventIdentifier event_identifier_;
std::map<std::string, ParameterValue> data_;
EventCallback callback_;
+ QThread* callback_thread_ = nullptr; ///<
};
Event::Event(const std::string& event_id,
@@ -112,4 +133,8 @@ void Event::AddParameter(const std::string& key, const ParameterValue& value) {
p_->AddParameter(key, value);
}
+void Event::ExecuteCallback(ListenerIdentifier l_id, DataObjectPtr d_o) {
+ p_->ExecuteCallback(std::move(l_id), d_o);
+}
+
} // namespace GpgFrontend::Module \ No newline at end of file