160 lines
4.8 KiB
JavaScript
160 lines
4.8 KiB
JavaScript
/* eslint-disable */
|
|
const winURL = process.env.NODE_ENV === 'development'
|
|
? `http://localhost:9080/src/renderer/utils/`
|
|
: `file://D:/GIT/flightgear-airports/src/renderer/utils/`
|
|
|
|
var path = require('path');
|
|
const fs = require('fs');
|
|
|
|
importScripts('../../../node_modules/dijkstrajs/dijkstra.js');
|
|
|
|
const homedir = require('os').homedir();
|
|
|
|
importScripts('logger.js');
|
|
|
|
function errorReceiver(event) {
|
|
throw event.data;
|
|
}
|
|
|
|
onmessage = function (event) {
|
|
postMessage('checkStarted');
|
|
logger('info', 'Check Started');
|
|
console.log(event.data);
|
|
if (event.data[0] === 'check') {
|
|
checkGroundnet(event.data[1]).then(result => {
|
|
console.log("DONE Checking");
|
|
postMessage(['DONE', result]);
|
|
// event.origin.webContents.send('scanFinished');
|
|
}
|
|
).catch(result => {
|
|
console.log('Crashed');
|
|
console.log(result);
|
|
postMessage('DONE');
|
|
});
|
|
}
|
|
};
|
|
|
|
async function checkGroundnet(data) {
|
|
var promise = new Promise(function (resolve, reject) {
|
|
try {
|
|
// debugger;
|
|
var parkings = data.map(mapParkings).filter(n => n !== undefined);
|
|
var runwayNodes = data.map(mapRunwayNodes).filter(n => n !== undefined);
|
|
var edges = data.map(mapEdges).filter(n => n !== undefined);
|
|
this.max = parkings.length * runwayNodes.length;
|
|
this.postMessage(['max', this.max]);
|
|
|
|
var graph = {};
|
|
parkings.forEach(element => {
|
|
graph[element] = {};
|
|
});
|
|
runwayNodes.forEach(element => {
|
|
graph[element] = {};
|
|
});
|
|
edges.forEach(element => {
|
|
graph[element.start] = {};
|
|
graph[element.end] = {};
|
|
});
|
|
edges.forEach(element => {
|
|
var node1 = graph[element.start];
|
|
node1[Number(element.end)] = 1;
|
|
var node2 = graph[element.end];
|
|
node2[Number(element.start)] = 1;
|
|
});
|
|
var okNodes = [];
|
|
logger('info', graph);
|
|
parkings.forEach(parkingNode => {
|
|
runwayNodes.forEach(runwayNode => {
|
|
var ok = checkRoute(graph, parkingNode, runwayNode);
|
|
if(ok) {
|
|
okNodes.push(parkingNode);
|
|
okNodes.push(runwayNode);
|
|
}
|
|
this.postMessage(['progress', 1]);
|
|
});
|
|
});
|
|
okNodes = okNodes.filter((v,i) => okNodes.indexOf(v) === i);
|
|
var allLegitimateEndNodes = parkings.concat(runwayNodes);
|
|
var notOkNodes = allLegitimateEndNodes.filter(
|
|
(v,i) => okNodes.indexOf(v) < 0
|
|
).map(
|
|
id => {return {id:id, message:'Node not connected'}}
|
|
);
|
|
if (parkings.length === 0) {
|
|
notOkNodes.push({id:0, message:'No parkings'});
|
|
}
|
|
if (runwayNodes.length === 0) {
|
|
notOkNodes.push({id:0, message:'No Runwaynodes'});
|
|
}
|
|
var danglingEnds = Object.entries(graph).filter(
|
|
(v,i) => Object.keys(v[1]).length <= 1
|
|
).filter(
|
|
(v,i) => allLegitimateEndNodes.indexOf(Number(v[0])) < 0
|
|
).map(
|
|
v => {return {id:Number(v[0]), message:'Node not a legimate end'}}
|
|
);
|
|
notOkNodes = notOkNodes.concat(danglingEnds);
|
|
|
|
// check1(graph);
|
|
// check2();
|
|
// this.postMessage(['progress', 1]);
|
|
resolve(notOkNodes);
|
|
|
|
} catch (error) {
|
|
reject(error);
|
|
}
|
|
});
|
|
return promise;
|
|
}
|
|
|
|
function checkRoute(graph, from, to) {
|
|
try {
|
|
var pathD = this.dijkstra.find_path(graph, from, to);
|
|
if (pathD.length>0) {
|
|
console.log(pathD);
|
|
}
|
|
return true;
|
|
} catch (error) {
|
|
console.log('No route from ' + from + ' to ' + to);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function check1(graph) {
|
|
var graph1 = {
|
|
a: {b: 1, d: 1},
|
|
b: {a: 1, c: 1, e: 1},
|
|
c: {b: 1, f: 1},
|
|
d: {a: 1, e: 1, g: 1},
|
|
e: {b: 1, d: 1, f: 1, h: 1},
|
|
f: {c: 1, e: 1, i: 1},
|
|
g: {d: 1, h: 1},
|
|
h: {e: 1, g: 1, i: 1},
|
|
i: {f: 1, h: 1}
|
|
};
|
|
var path = this.dijkstra.find_path(graph, 'a', 'i');
|
|
console.log(path);
|
|
}
|
|
|
|
function check2(params) {
|
|
|
|
}
|
|
|
|
var mapParkings = function (o) {
|
|
if(o.type === 'parking')
|
|
return o.index;
|
|
console.log(o);
|
|
}
|
|
|
|
var mapRunwayNodes = function (o) {
|
|
if(o.type === 'runway')
|
|
return o.index;
|
|
console.log(o);
|
|
}
|
|
|
|
var mapEdges = function (o) {
|
|
if(o.type === 'poly')
|
|
return {start: o.start, end: o.end};
|
|
console.log(o);
|
|
}
|