Files
qt-migration-legatus/qt6-after/qt6-migrated-legatus/Lts/Tools/SAASimulator/index.ts
T
torsten d5c13033e2 Session 022: Migrate Lts/Tools (72 submodules) to Qt6
- Copied complete Lts/Tools directory from qt5-before to qt6-after
- Updated 32 CMakeLists.txt files (Qt5:: → Qt6::)
- Tools subdirectory already included in parent Lts/CMakeLists.txt
- All 72 tool submodules now present in qt6-migrated-legatus
- Includes: Adler, ArAssets, ConfigX, DBAdministration, DBUpdate,
  DdsView, InfrastructureManagement, and 67 more tools
- C++17 standard (RTI 7.7.0 compatibility maintained)
- Tests deferred until final validation phase

Migration progress:
✅ Lts/Application (68 files)
✅ Lts/DDS (verified Qt6-ready)
✅ Lts/Plugins (60 submodules, verified)
✅ Lts/Projects (5 submodules, verified)
✅ Lts/Proxies (13 submodules, verified)
✅ Lts/Services (47 submodules, verified)
✅ Lts/Tools (72 submodules, copied + CMake updated)
✅ Lts/Viewer (LtsFileDialog, LtsReportDisplay, SituationMap)
🟡 TetraIF (partial)
🟡 Z (partial: nglwidgets, QtSingleApplication, qsql_informix, WMS_Interface)
2026-08-25 14:07:20 +02:00

214 lines
6.6 KiB
TypeScript
Executable File

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);