MCPcopy Create free account
hub / github.com/URLab-Sim/UnrealRoboticsLab / HandleMeta

Method HandleMeta

Source/URLab/Private/Bridge/RpcDispatcher.cpp:474–521  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

472}
473
474TSharedPtr<FJsonObject> FURLabRpcDispatcher::HandleMeta(const TSharedPtr<FJsonObject>& /*Req*/)
475{
476 // Pre-session bootstrap reply: ship the full op table so the Python
477 // client can synthesise `URLabClient.<namespace>.<op>` methods at
478 // discover time. `meta` is intentionally NOT registered through the
479 // table — it's hardcoded above, which breaks the chicken-and-egg.
480 TSharedPtr<FJsonObject> Reply = MakeShared<FJsonObject>();
481 Reply->SetStringField(TEXT("op"), TEXT("meta_ok"));
482
483 auto CategoryString = [](URLabOpRegistry::EOpCategory C) {
484 switch (C)
485 {
486 case URLabOpRegistry::EOpCategory::EditorOnly:
487 return TEXT("editor_only");
488 case URLabOpRegistry::EOpCategory::ManagerRequired:
489 return TEXT("manager_required");
490 case URLabOpRegistry::EOpCategory::NoManager:
491 return TEXT("no_manager");
492 }
493 return TEXT("unknown");
494 };
495
496 TArray<TSharedPtr<FJsonValue>> Ops;
497 for (const URLabOpRegistry::FOpDecl& D : URLabOpRegistry::GetAllOps())
498 {
499 TSharedPtr<FJsonObject> O = MakeShared<FJsonObject>();
500 O->SetStringField(TEXT("name"), D.Name);
501 O->SetStringField(TEXT("category"), CategoryString(D.Category));
502 O->SetStringField(TEXT("namespace"), D.Namespace);
503 if (D.RequiredFields.Num() > 0)
504 {
505 TArray<TSharedPtr<FJsonValue>> Fields;
506 for (const FString& F : D.RequiredFields)
507 Fields.Add(MakeShared<FJsonValueString>(F));
508 O->SetArrayField(TEXT("required_fields"), Fields);
509 }
510 if (D.ReplyFields.Num() > 0)
511 {
512 TArray<TSharedPtr<FJsonValue>> Fields;
513 for (const FString& F : D.ReplyFields)
514 Fields.Add(MakeShared<FJsonValueString>(F));
515 O->SetArrayField(TEXT("reply_fields"), Fields);
516 }
517 Ops.Add(MakeShared<FJsonValueObject>(O));
518 }
519 Reply->SetArrayField(TEXT("ops"), Ops);
520 return Reply;
521}
522
523TSharedPtr<FJsonObject> FURLabRpcDispatcher::HandleSetPaused(const TSharedPtr<FJsonObject>& Req)
524{

Callers

nothing calls this directly

Calls 1

GetAllOpsFunction · 0.85

Tested by

no test coverage detected