MCPcopy Create free account
hub / github.com/OpenKneeboard/OpenKneeboard / DispatchEvent

Method DispatchEvent

src/app/app-common/APIEventServer.cpp:144–170  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

142}
143
144OpenKneeboard::fire_and_forget APIEventServer::DispatchEvent(
145 std::string_view ref) {
146 const auto stayingAlive = shared_from_this();
147 const std::string buffer(ref);
148 auto event = APIEvent::Unserialize(buffer);
149
150 co_await mUIThread;
151 OPENKNEEBOARD_TraceLoggingCoro(
152 "APIEvent", TraceLoggingValue(event.name.c_str(), "Name"));
153 if (event.name != APIEvent::EVT_MULTI_EVENT) {
154 this->evAPIEvent.Emit(event);
155 co_return;
156 }
157
158 std::vector<std::tuple<std::string, std::string>> events;
159 events = nlohmann::json::parse(event.value);
160 auto dq = DispatcherQueue::GetForCurrentThread();
161 for (auto&& [name, value]: events) {
162 OPENKNEEBOARD_TraceLoggingCoro(
163 "APIEvent/Multi", TraceLoggingValue(name.c_str(), "Name"));
164 this->evAPIEvent.Emit({name, value});
165 // Re-enter event loop, even if not switching threads
166 co_await wil::resume_foreground(dq);
167 }
168
169 co_return;
170}
171
172}// namespace OpenKneeboard

Callers 1

RunSingleMethod · 0.95

Calls 1

EmitMethod · 0.45

Tested by

no test coverage detected