MCPcopy Create free account
hub / github.com/Kitware/CMake / processEvent

Method processEvent

Utilities/cmcppdap/src/session.cpp:391–431  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

389 }
390
391 Payload processEvent(dap::json::Deserializer* d) {
392 dap::string event;
393 if (!d->field("event", &event)) {
394 handlers.error("Event missing string 'event' field");
395 return {};
396 }
397
398 const dap::TypeInfo* typeinfo;
399 GenericEventHandler handler;
400 std::tie(typeinfo, handler) = handlers.event(event);
401 if (!typeinfo) {
402 handlers.error("No event handler registered for event '%s'",
403 event.c_str());
404 return {};
405 }
406
407 auto data = new uint8_t[typeinfo->size()];
408 typeinfo->construct(data);
409
410 // "body" is an optional field for some events, such as "Terminated Event".
411 bool body_ok = true;
412 d->field("body", [&](dap::Deserializer* d) {
413 if (!typeinfo->deserialize(d, data)) {
414 body_ok = false;
415 }
416 return true;
417 });
418
419 if (!body_ok) {
420 handlers.error("Failed to deserialize event '%s' body", event.c_str());
421 typeinfo->destruct(data);
422 delete[] data;
423 return {};
424 }
425
426 return [=] {
427 handler(data);
428 typeinfo->destruct(data);
429 delete[] data;
430 };
431 }
432
433 void processResponse(const dap::Deserializer* d) {
434 dap::integer requestSeq = 0;

Callers

nothing calls this directly

Calls 8

c_strMethod · 0.80
fieldMethod · 0.45
errorMethod · 0.45
eventMethod · 0.45
sizeMethod · 0.45
constructMethod · 0.45
deserializeMethod · 0.45
destructMethod · 0.45

Tested by

no test coverage detected