Added demo data generator

This commit is contained in:
dpassoni 2023-03-07 12:59:24 +01:00
parent 11a495f4ac
commit 6c3f2c9d22
4 changed files with 110 additions and 64 deletions

View File

@ -22,3 +22,15 @@ app.use('/uikit', uikitRouter);
app.set('view engine', 'ejs');
module.exports = app;
const DemoDataGenerator = require('./demo.js');
var demoDataGenerator = new DemoDataGenerator(10);
app.get('/demo/units/refresh', (req, res) => demoDataGenerator.unitsRefresh(req, res));
app.get('/demo/units/update', (req, res) => demoDataGenerator.unitsUpdate(req, res));
app.get('/demo/logs', (req, res) => demoDataGenerator.logs(req, res));
app.get('/demo/bullseyes', (req, res) => demoDataGenerator.bullseyes(req, res));
app.get('/demo/airbases', (req, res) => demoDataGenerator.airbases(req, res));

93
client/demo.js Normal file
View File

@ -0,0 +1,93 @@
const DEMO_UNIT_DATA = {
AI: true,
name: "F-5E",
unitName: "Olympus 1-1",
groupName: "Group 1",
alive: true,
category: "Aircraft",
flightData: {
latitude: 37.2,
longitude: -115.8,
altitude: 2000,
heading: 0.5,
speed: 300
},
missionData: {
fuel: 0.5,
flags: {human: false},
ammo: [],
targets: [],
hasTask: true,
coalition: "blue"
},
formationData: {
formation: "Echelon",
isLeader: false,
isWingman: false,
leaderID: null,
wingmen: [],
wingmenIDs: []
},
taskData: {
currentTask: "Example task",
activePath: undefined,
targetSpeed: 400,
targetAltitude: 3000
},
optionsData: {
ROE: "None",
reactionToThreat: "None",
}
}
class DemoDataGenerator {
constructor(unitsNumber)
{
this.demoUnits = this.generateRandomUnitsDemoData(unitsNumber);
}
unitsRefresh(req, res) {
var ret = this.demoUnits;
res.send(JSON.stringify(ret));
}
unitsUpdate(req, res){
Object.keys(this.demoUnits.units).forEach((ID) => {
this.demoUnits.units[ID].flightData.heading += 0.05;
this.demoUnits.units[ID].flightData.latitude += 0.001 * Math.cos(this.demoUnits.units[ID].flightData.heading);
this.demoUnits.units[ID].flightData.longitude += 0.001 * Math.sin(this.demoUnits.units[ID].flightData.heading);
});
var ret = this.demoUnits;
res.send(JSON.stringify(ret));
};
logs(req, res){
var ret = {logs: {}};
res.send(JSON.stringify(ret));
};
airbases(req, res){
var ret = {airbases: {}};
res.send(JSON.stringify(ret));
};
bullseyes(req, res){
var ret = {bullseyes: {}};
res.send(JSON.stringify(ret));
};
generateRandomUnitsDemoData(unitsNumber)
{
var units = {};
for (let i = 0; i < unitsNumber; i++)
{
units[String(i)] = JSON.parse(JSON.stringify(DEMO_UNIT_DATA));
units[String(i)].flightData.latitude += (Math.random() - 0.5) * 0.3;
units[String(i)].flightData.longitude += (Math.random() - 0.5) * 0.3;
}
return {"units": units};
}
}
module.exports = DemoDataGenerator;

View File

@ -1,16 +1,14 @@
import * as L from 'leaflet'
import { setConnected } from '..';
const DEMO = false;
/* Edit here to change server address */
const REST_ADDRESS = "http://localhost:30000/olympus";
const REST_ADDRESS = "http://localhost:3000/demo";
const UNITS_URI = "units";
const REFRESH_URI = "refresh";
const UPDATE_URI = "update";
const LOGS_URI = "logs";
const AIRBASES_URI = "airbases";
const BULLSEYE_URI = "bullseye";
const BULLSEYE_URI = "bullseyes";
export function GET(callback: CallableFunction, uri: string){
var xmlHttp = new XMLHttpRequest();
@ -50,10 +48,7 @@ export function getLogs(callback: CallableFunction) {
}
export function getUnits(callback: CallableFunction, refresh: boolean = false) {
if (!DEMO)
GET(callback, `${UNITS_URI}/${refresh? REFRESH_URI: UPDATE_URI}`);
else
callback(refresh? generateRandomUnitsDemoData(100): {units:{}});
GET(callback, `${UNITS_URI}/${refresh? REFRESH_URI: UPDATE_URI}`);
}
export function addDestination(ID: number, path: any) {
@ -145,58 +140,3 @@ export function setReactionToThreat(ID: number, reactionToThreat: string) {
var data = {"setReactionToThreat": command}
POST(data, () => { });
}
function generateRandomUnitsDemoData(unitsNumber: number)
{
var units: any = {};
for (let i = 0; i < unitsNumber; i++)
{
units[String(i)] = structuredClone(DEMO_UNIT_DATA);
units[String(i)].flightData.latitude += (Math.random() - 0.5) * 0.3;
units[String(i)].flightData.longitude += (Math.random() - 0.5) * 0.3;
}
return {"units": units};
}
const DEMO_UNIT_DATA = {
AI: true,
name: "F-5E",
unitName: "Olympus 1-1",
groupName: "Group 1",
alive: true,
category: "Aircraft",
flightData: {
latitude: 37.2,
longitude: -115.8,
altitude: 2000,
heading: 0.5,
speed: 300
},
missionData: {
fuel: 0.5,
flags: {human: false},
ammo: [],
targets: [],
hasTask: true,
coalition: "blue"
},
formationData: {
formation: "Echelon",
isLeader: false,
isWingman: false,
leaderID: null,
wingmen: [],
wingmenIDs: []
},
taskData: {
currentTask: "Example task",
activePath: undefined,
targetSpeed: 400,
targetAltitude: 3000
},
optionsData: {
ROE: "None",
reactionToThreat: "None",
}
}

View File

@ -48,7 +48,8 @@ export class UnitsManager {
.filter((ID: string) => !(ID in this.#units))
.reduce((timeout: number, ID: string) => {
setTimeout(() => {
this.addUnit(parseInt(ID), data.units[ID]);
if (!(ID in this.#units))
this.addUnit(parseInt(ID), data.units[ID]);
this.#units[parseInt(ID)]?.setData(data.units[ID]);
}, timeout);
return timeout + 10;