Files
qt-migration-legatus/qt5-before/dlbo/Lts/Tools/SAASimulator/index.ts
T
torstenandCopilot 7173785915 Qt6 Migration: Complete migration with DDS/RTI support and build validation
Major Changes:
- Merged latest Qt5 devel content from dlbo (292 files changed, 7 new dirs)
- Consolidated forward-declarations and include folders
- Removed unneeded modules per Niklas' repo check list

Build System Fixes:
- Fixed CMake VERSION_GREATER syntax in ParticipantManagement/CMakeLists.txt
- Added VLC packages (libvlc-dev, vlc-plugin-base) to docker_build.sh
- Added PostgreSQL dev packages (libpq-dev, postgresql-server-dev-all) to Dockerfile
- Fixed locale warnings (ANSI_X3.4-1968 → C.UTF-8)
- Fixed ArcGIS SDK path warnings when BUILD_ARCGIS=OFF

Code Generation Fixes:
- Fixed IDL enum collisions (PortType→CorePortType/DdsutPortType, PdmEventType)
- Fixed Grantlee template svc_translation.cpp.grantlee:
  - Changed {{ idl_enum.name }}_def:: to {{ idl_enum.name }}::
  - Fixed .underlying() calls for C++11 scoped enums (enum class)
- Removed generated files from repo (moc_*, *_dtc.h, *_ftc.h)

Validation:
- BUILD_RTI=ON: SUCCESS
- BUILD_RTI=OFF: SUCCESS
- C++17 standard maintained for RTI 7.7 compatibility
- Ubuntu 26.04 Docker environment verified

Remaining Warnings (expected):
- BgViewer, KDChart, KDReports, Poppler-Qt6 not found (optional features)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-09-15 18:20:26 +00:00

214 lines
6.6 KiB
TypeScript

import { SAASimulator } from "./SaaSimulator";
import { input, number, select, Separator } from '@inquirer/prompts';
import readline, { clearLine } from "readline";
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
async function clearLastLine(line: number) {
readline.moveCursor(process.stdout, 0, -1);
readline.clearLine(process.stdout, 0);
readline.moveCursor(process.stdout, 0, -1);
readline.clearLine(process.stdout, 0);
}
async function readCommands(filename: string): Promise<any> {
return Bun.file(filename).json();
}
async function selectSaa() {
if (saas.length < 1) {
currentState = "mainMenu";
console.log("There are no SAAs")
return Promise.resolve();
} else if (saas.length >= 1) {
let saaChoices = saas.map((saa, index) => { return { name: `Saa Exercise: ${saa.getExId()} Party: ${saa.getPartyId()}`, value: index } });
saaChoices.push({name:"Back",value: -1});
let lastCursorPos = rl.getCursorPos().cols;
const answer: number = await select({ message: "Select Saa to control", choices: saaChoices });
clearLastLine(lastCursorPos);
if(answer == -1){
currentState = "mainMenu";
return Promise.resolve();
}
selectedSaa = answer;
}
currentState = "controlSaa";
return Promise.resolve();
}
async function connectSaa(){
let uri: string;
if (!process.env.URI) {
let answer;
do {
answer = await input({ message: "Enter the uri of the Excon Json Interface:" });
} while (!answer || answer == "");
uri = answer;
} else {
uri = process.env.URI;
}
let port: number;
if (!process.env.EXCONPORT) {
let answer;
do {
answer = await number({ message: "Enter the port of the Excon Json Interface:" });
} while (!answer);
port = answer;
} else {
port = Number.parseInt(process.env.EXCONPORT);
if (port == undefined) {
console.log("The port from the environment variable is invalid!");
}
}
saas[selectedSaa].connect(uri,port);
currentState = "mainMenu";
}
async function registerSaa(){
if (!process.env.EXCONPORT) {
let partyIds = await saas[selectedSaa].getPartys("http://localhost", 7300, 42);
console.log(partyIds[0])
const choices = partyIds.map((partyIds: any) => { return { name: partyIds.name, value: partyIds.id } })
let lastCursorPos = rl.getCursorPos().cols;
const answer = await select({ message: "Select a party.", choices: choices })
clearLastLine(lastCursorPos);
selectedPartyId = answer;
}else{
const partyId = Number.parseInt(process.env.PARTYID || "");
if (partyId == undefined) {
console.log("The port from the environment variable is invalid!");
}
selectedPartyId = partyId
}
saas[selectedSaa].register(selectedPartyId);
}
let selectedSaa = 0;
let selectedPartyId = 3;
const saas: SAASimulator[] = [];
const commands = await readCommands("commands.json");
let currentState = "mainMenu";
let commandFuncitons: any = { createSaa: createSaa, selectSaa: selectSaa, connectSaa:connectSaa ,registerSaa: registerSaa};
while (true) {
let currentCommand = commands.commands.find((command: any) => { return command.state === currentState; });
let currentChoices = currentCommand.options;
let lastCursorPos = rl.getCursorPos().cols;
const answer: string = await select({ message: currentCommand.message, choices: currentChoices });
clearLastLine(lastCursorPos);
if (answer.charAt(0) == '$') {
}
if(!commandFuncitons[answer]){
console.error(`commandFunction for ${answer} does not exist`);
}else{
await commandFuncitons[answer]();
}
}
async function createSaa() {
let uri: string;
if (!process.env.URI) {
let answer;
do {
answer = await input({ message: "Enter the uri of the Excon Json Interface:" });
} while (!answer || answer == "");
uri = answer;
} else {
uri = process.env.URI;
}
let port: number;
if (!process.env.EXCONPORT) {
let answer;
do {
answer = await number({ message: "Enter the port of the Excon Json Interface:" });
} while (!answer);
port = answer;
} else {
port = Number.parseInt(process.env.EXCONPORT);
if (port == undefined) {
console.log("The port from the environment variable is invalid!");
}
}
const saa = new SAASimulator();
const exerciseIds = await saa.getExerciseIds(uri, port);
console.log(exerciseIds)
let exerciseId: number;
if (!process.env.EXERCISEID) {
const choices = exerciseIds.map((exerciseId: number) => { return { name: exerciseId.toString(), value: exerciseId } })
let lastCursorPos = rl.getCursorPos().cols;
const answer = await select({ message: "Select an exercise.", choices: choices })
clearLastLine(lastCursorPos);
exerciseId = answer;
} else {
exerciseId = Number.parseInt(process.env.EXERCISEID);
if (!exerciseIds.includes(exerciseId)) {
console.log("The exerciseId from the environment variable is invalid!");
}
}
saa.setExerciseId(exerciseId);
saas.push(saa);
}
let uri: string;
if (!process.env.URI) {
let answer;
do {
answer = await input({ message: "Enter the uri of the Excon Json Interface:" });
} while (!answer || answer == "");
uri = answer;
} else {
uri = process.env.URI;
}
let port: number;
if (!process.env.EXCONPORT) {
let answer;
do {
answer = await number({ message: "Enter the port of the Excon Json Interface:" });
} while (!answer);
port = answer;
} else {
port = Number.parseInt(process.env.EXCONPORT);
if (port == undefined) {
console.log("The port from the environment variable is invalid!");
}
}
const saa = new SAASimulator();
const exerciseIds = await saa.getExerciseIds(uri, port);
let exerciseId: number;
if (!process.env.EXERCISEID) {
const choices = exerciseIds.map((exerciseId: number) => { return { name: exerciseId.toString(), value: exerciseId } })
const answer = await select({ message: "Select an exercise.", choices: choices })
exerciseId = answer;
} else {
exerciseId = Number.parseInt(process.env.EXERCISEID);
if (!exerciseIds.includes(exerciseId)) {
console.log("The exerciseId from the environment variable is invalid!");
}
}
saa.setExerciseId(exerciseId);
console.log(await saa.getPartys(uri, port, exerciseId));
saa.connect(uri, port);
setTimeout(() => { saa.sendTelegram({ uuid: "", version: "", timestamp: 1, sender: "", reciver: "", referenceUuid: "" }, { type: "EX-Anmeldung", typeId: 1, data: { partyId: 3 } }) }, 1000);
setTimeout(() => { saa.getParticipantNumbers(); }, 1000);
setTimeout(() => { saa.sendTelegram({ type: "EX-SQ(WS)", typeId: 7, data: { typ: "Pzh", kenner: "A", status: "Einsatzbereit" } }, { typeId: 7 }) }, 2000);
setTimeout(() => { saa.getParticipantNumbers(); }, 3000);