MAK RTI 4.6.1과 IEEE 1516-2000(SISO DLC)을 목표로 하는 C++17/C# HLA client 골격입니다. FDD와 client bindings를 XML로 관리하고, 검증된 typed message 및 codec을 자동 생성합니다.
현재 구현은 상용 SDK 없이 빌드되는 vendor-neutral 코어와 in-process Mock transport입니다. MAK RTI direct adapter는 실제 4.6.1 SDK의 header, library, example과 ABI를 확인한 뒤 별도 target으로 추가합니다. VR-Link에는 종속되지 않습니다.
- IEEE 1516-2000 FDD와 client bindings 교차 검증
- C++ message, object/interaction binding, HLA codec 결정적 생성
- typed object register/update와 interaction send/subscribe API
- thread-safe Mock transport와 RAII subscription
- XML profile → 환경변수 → C++ option 설정 우선순위
- Windows x64와 Rocky Linux 9 x64용 정적/공유 C++ 라이브러리
- 예외가 ABI 경계를 넘지 않는 C API와 C# P/Invoke SDK
net8.0/net10.0,win-x64/linux-x64런타임을 담은 NuGet 패키지- Windows PowerShell 및 Linux shell 빌드, Docker 검증, 교차 플랫폼 CI
flowchart LR
FDD[FDD XML] --> V[Validator / Generator]
B[Client bindings XML] --> V
V --> G[Generated C++ messages / codec]
A[Application] --> C[MAKRTI Client API]
G --> C
C --> T[ITransport]
T --> M[Mock transport]
T -. SDK 확인 후 별도 추가 .-> R[MAK RTI 4.6.1 adapter]
L[MAK Data Logger] -. 외부 federate .-> R
Windows에서는 CMake 3.24+, Python 3, C++17 MSVC와 .NET 10 SDK를 사용합니다.
./build.ps1 -Doctor
./build.ps1 -Generate
./build.ps1 -Configuration Debug -Test
./build/windows/Debug/makrti-cli.exe demo ./config/makrti_client.mock.xml
./build.ps1 -Configuration Release -Test -Package
./tools/test-rocky9.ps1
./tools/package-nuget.ps1Rocky Linux 9에서는 Docker 없이도 ./build.sh --doctor --clean --test --package로
동일한 검증을 실행할 수 있습니다. 주요 산출물은 다음과 같습니다.
| 산출물 | 내용 |
|---|---|
makrti-client-Release.zip |
Windows x64 C++ static/shared, C ABI DLL |
makrti-client-rocky9-x64.tar.gz |
Rocky Linux 9 x64 C++ static/shared, C ABI SO |
MAKRTI.Client.0.2.0.nupkg |
C# SDK와 Windows/Linux x64 native runtime |
메시지를 바꾸려면 Simulation.xml과
client-bindings.xml을 수정한 뒤
./build.ps1 -Generate를 실행합니다. generated/ 파일은 직접 편집하지 않습니다.
#include <makrti/makrti.hpp>
auto config = makrti::load_configuration("config/makrti_client.mock.xml");
makrti::Client client(std::move(config), makrti::make_mock_transport());
client.connect();
auto received = client.subscribe_interactions<makrti::generated::WeaponFire>(
[](const auto& fire) { /* use fire */ });
client.send(makrti::generated::WeaponFire{101, 202, 1, "TrainingMissile"});MAK RTI, VR-Link, MAK Data Logger 및 그 runtime/license는 이 저장소에 포함되지 않습니다. MAK 제품명은 각 권리자의 상표일 수 있으며, 이 프로젝트는 MAK Technologies의 공식 배포물이 아닙니다. 저장소 자체 코드는 Apache License 2.0으로 배포됩니다.