214 lines
6.6 KiB
TypeScript
Executable File
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);
|