Files
qt5-legatus-legacy/Lts/Tools/SAASimulator/index.ts
T
2026-08-13 18:33:10 +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);