MCPcopy Create free account
hub / github.com/dfranx/SHADERed / processRequest

Method processRequest

libs/cppdap/src/session.cpp:307–377  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

305 }
306
307 Payload processRequest(dap::json::Deserializer* d, dap::integer sequence) {
308 dap::string command;
309 if (!d->field("command", &command)) {
310 handlers.error("Request missing string 'command' field");
311 return {};
312 }
313
314 const dap::TypeInfo* typeinfo;
315 GenericRequestHandler handler;
316 std::tie(typeinfo, handler) = handlers.request(command);
317 if (!typeinfo) {
318 handlers.error("No request handler registered for command '%s'",
319 command.c_str());
320 return {};
321 }
322
323 auto data = new uint8_t[typeinfo->size()];
324 typeinfo->construct(data);
325
326 if (!d->field("arguments", [&](dap::Deserializer* d) {
327 return typeinfo->deserialize(d, data);
328 })) {
329 handlers.error("Failed to deserialize request");
330 typeinfo->destruct(data);
331 delete[] data;
332 return {};
333 }
334
335 return [=] {
336 handler(
337 data,
338 [=](const dap::TypeInfo* typeinfo, const void* data) {
339 // onSuccess
340 dap::json::Serializer s;
341 s.object([&](dap::FieldSerializer* fs) {
342 return fs->field("seq", dap::integer(nextSeq++)) &&
343 fs->field("type", "response") &&
344 fs->field("request_seq", sequence) &&
345 fs->field("success", dap::boolean(true)) &&
346 fs->field("command", command) &&
347 fs->field("body", [&](dap::Serializer* s) {
348 return typeinfo->serialize(s, data);
349 });
350 });
351 send(s.dump());
352
353 if (auto handler = handlers.responseSent(typeinfo)) {
354 handler(data, nullptr);
355 }
356 },
357 [=](const dap::TypeInfo* typeinfo, const dap::Error& error) {
358 // onError
359 dap::json::Serializer s;
360 s.object([&](dap::FieldSerializer* fs) {
361 return fs->field("seq", dap::integer(nextSeq++)) &&
362 fs->field("type", "response") &&
363 fs->field("request_seq", sequence) &&
364 fs->field("success", dap::boolean(false)) &&

Callers

nothing calls this directly

Calls 13

integerClass · 0.85
booleanClass · 0.85
requestMethod · 0.80
responseSentMethod · 0.80
fieldMethod · 0.45
errorMethod · 0.45
sizeMethod · 0.45
constructMethod · 0.45
deserializeMethod · 0.45
destructMethod · 0.45
objectMethod · 0.45
serializeMethod · 0.45

Tested by

no test coverage detected