MCPcopy Create free account
hub / github.com/Codeya-IDE/deepin-ide / processEvent

Method processEvent

3rdparty/cppdap/src/session.cpp:399–439  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 8

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

Tested by

no test coverage detected