Lots of changes
- ✅ Feedback van dataSensor array - ✅ dataSliders min/max and unit - ✅ Camera before Unity - ✅ Restart knop buiten service mode - ✅ Operator phonenumber button - ✅ Gracefull shutdown - ✅ Out of service control
This commit is contained in:
5
.vscode/launch.json
vendored
5
.vscode/launch.json
vendored
@@ -11,7 +11,10 @@
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
],
|
||||
"program": "${workspaceFolder}\\dist\\Entry.js"
|
||||
"program": "${workspaceFolder}\\dist\\Entry.js",
|
||||
"args": [
|
||||
"--no-reboot"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
13
TODO.md
Normal file
13
TODO.md
Normal file
@@ -0,0 +1,13 @@
|
||||
- **SMS Service met log**
|
||||
- ✅ Feedback van dataSensor array
|
||||
- ✅ dataSliders min/max and unit
|
||||
- ✅ Camera before Unity
|
||||
- ✅ Restart knop buiten service mode
|
||||
- ✅ Operator phonenumber button
|
||||
- ✅ Gracefull shutdown
|
||||
- ✅ Out of service control
|
||||
|
||||
Checken met Sjoerd
|
||||
|
||||
- Sliders opslaan
|
||||
- Camera error code
|
||||
2
dist/CameraRunner.js.map
vendored
2
dist/CameraRunner.js.map
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"CameraRunner.js","sourceRoot":"","sources":["../src/CameraRunner.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"CameraRunner.js","sourceRoot":"","sources":["../src/CameraRunner.ts"],"names":[],"mappings":"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"}
|
||||
3
dist/Configuration/DefaultConfiguration.js
vendored
3
dist/Configuration/DefaultConfiguration.js
vendored
@@ -25,5 +25,8 @@ exports.DefaultConfiguration = {
|
||||
},
|
||||
pollInterval: 5000,
|
||||
},
|
||||
support: {
|
||||
telephone: '+31613392837',
|
||||
},
|
||||
};
|
||||
//# sourceMappingURL=DefaultConfiguration.js.map
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"DefaultConfiguration.js","sourceRoot":"","sources":["../../src/Configuration/DefaultConfiguration.ts"],"names":[],"mappings":";;;AAEa,QAAA,oBAAoB,GAAW;IAC3C,SAAS,EAAE;QACV,IAAI,EAAE,IAAI;KACV;IACD,KAAK,EAAE;QACN,UAAU,EAAE;YACX,IAAI,EAAE,EAAE;YACR,SAAS,EAAE,EAAE;YACb,YAAY,EAAE,IAAI;SAClB;QAED,SAAS,EAAE;YACV,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,IAAI;SACV;QAED,iBAAiB,EAAE,IAAI;QACvB,wBAAwB,EAAE,IAAI;KAC9B;IACD,YAAY,EAAE;QACb,SAAS,EAAE;YACV,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,IAAI;SACV;QAED,YAAY,EAAE,IAAI;KAClB;CACD,CAAC"}
|
||||
{"version":3,"file":"DefaultConfiguration.js","sourceRoot":"","sources":["../../src/Configuration/DefaultConfiguration.ts"],"names":[],"mappings":";;;AAEa,QAAA,oBAAoB,GAAW;IAC3C,SAAS,EAAE;QACV,IAAI,EAAE,IAAI;KACV;IACD,KAAK,EAAE;QACN,UAAU,EAAE;YACX,IAAI,EAAE,EAAE;YACR,SAAS,EAAE,EAAE;YACb,YAAY,EAAE,IAAI;SAClB;QAED,SAAS,EAAE;YACV,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,IAAI;SACV;QAED,iBAAiB,EAAE,IAAI;QACvB,wBAAwB,EAAE,IAAI;KAC9B;IACD,YAAY,EAAE;QACb,SAAS,EAAE;YACV,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,IAAI;SACV;QAED,YAAY,EAAE,IAAI;KAClB;IACD,OAAO,EAAE;QACR,SAAS,EAAE,cAAc;KACzB;CACD,CAAC"}
|
||||
39
dist/Main.js
vendored
39
dist/Main.js
vendored
@@ -76,6 +76,45 @@ var Main = /** @class */ (function () {
|
||||
});
|
||||
});
|
||||
};
|
||||
Main.prototype.restart = function () {
|
||||
return __awaiter(this, void 0, void 0, function () {
|
||||
var doReboot, succeed;
|
||||
var _this = this;
|
||||
return __generator(this, function (_a) {
|
||||
switch (_a.label) {
|
||||
case 0:
|
||||
console.log('Stopping UnityRunner...');
|
||||
return [4 /*yield*/, this.UnityRunner.stop()];
|
||||
case 1:
|
||||
_a.sent();
|
||||
doReboot = !process.argv.includes('--no-reboot');
|
||||
console.log("".concat(doReboot ? 'Rebooting' : 'Restarting', " CameraRunner..."));
|
||||
return [4 /*yield*/, new Promise(function (resolve) {
|
||||
_this.CameraRunner.sendCommand(doReboot ? 'reboot' : 'restart', function (response) {
|
||||
if (!response.succeed) {
|
||||
console.error('Failed to reboot CameraRunner:', response.message);
|
||||
resolve(false);
|
||||
}
|
||||
else {
|
||||
console.log('CameraRunner rebooted successfully.');
|
||||
resolve(true);
|
||||
}
|
||||
});
|
||||
})];
|
||||
case 2:
|
||||
succeed = _a.sent();
|
||||
if (!succeed)
|
||||
return [2 /*return*/];
|
||||
console.log('Starting UnityRunner...');
|
||||
return [4 /*yield*/, this.UnityRunner.start()];
|
||||
case 3:
|
||||
_a.sent();
|
||||
console.log('Restart complete.');
|
||||
return [2 /*return*/];
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
return Main;
|
||||
}());
|
||||
exports.Main = Main;
|
||||
|
||||
2
dist/Main.js.map
vendored
2
dist/Main.js.map
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"Main.js","sourceRoot":"","sources":["../src/Main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6BAA4B;AAC5B,mDAAkD;AAClD,yBAA6B;AAC7B,6EAG8C;AAC9C,+CAA8C;AAC9C,mDAAkD;AAClD,yDAAwD;AAExD;IAAA;QACC,aAAQ,GAAG,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,oBAAoB,EAAE,aAAa,CAAC,CAAC;QAEhE,yBAAoB,GAAG,IAAI,2CAAoB,CAAC,IAAI,CAAC,CAAC;QACtD,cAAS,GAAG,IAAI,qBAAS,CAAC,IAAI,CAAC,CAAC;QAEhC,iBAAY,GAAG,IAAI,2BAAY,CAAC,IAAI,CAAC,CAAC;QACtC,gBAAW,GAAG,IAAI,yBAAW,CAAC,IAAI,CAAC,CAAC;QACpC,mBAAc,GAAG,IAAI,+BAAc,CAAC,IAAI,CAAC,CAAC;IAc3C,CAAC;IAVM,oBAAK,GAAX;;;;;;4BACC,qBAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAA;;wBAAtC,SAAsC,CAAC;wBACvC,qBAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAA;;wBAA7B,SAA6B,CAAC;wBAE9B,qBAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAA;;wBAAjC,SAAiC,CAAC;wBAElC,UAAU,CAAC;4BACV,KAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;wBAC1B,CAAC,EAAE,MAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,mCAAI,CAAC,CAAC,CAAC;;;;;KACnD;IACF,WAAC;AAAD,CAAC,AAtBD,IAsBC;AAtBY,oBAAI"}
|
||||
{"version":3,"file":"Main.js","sourceRoot":"","sources":["../src/Main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6BAA4B;AAC5B,mDAAkD;AAClD,yBAA6B;AAC7B,6EAG8C;AAC9C,+CAA8C;AAC9C,mDAAkD;AAClD,yDAAwD;AAExD;IAAA;QACC,aAAQ,GAAG,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,oBAAoB,EAAE,aAAa,CAAC,CAAC;QAEhE,yBAAoB,GAAG,IAAI,2CAAoB,CAAC,IAAI,CAAC,CAAC;QACtD,cAAS,GAAG,IAAI,qBAAS,CAAC,IAAI,CAAC,CAAC;QAEhC,iBAAY,GAAG,IAAI,2BAAY,CAAC,IAAI,CAAC,CAAC;QACtC,gBAAW,GAAG,IAAI,yBAAW,CAAC,IAAI,CAAC,CAAC;QACpC,mBAAc,GAAG,IAAI,+BAAc,CAAC,IAAI,CAAC,CAAC;IA6C3C,CAAC;IAzCM,oBAAK,GAAX;;;;;;4BACC,qBAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAA;;wBAAtC,SAAsC,CAAC;wBACvC,qBAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAA;;wBAA7B,SAA6B,CAAC;wBAE9B,qBAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAA;;wBAAjC,SAAiC,CAAC;wBAElC,UAAU,CAAC;4BACV,KAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;wBAC1B,CAAC,EAAE,MAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,mCAAI,CAAC,CAAC,CAAC;;;;;KACnD;IAEK,sBAAO,GAAb;;;;;;;wBACC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;wBACvC,qBAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAA;;wBAA7B,SAA6B,CAAC;wBAExB,QAAQ,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;wBACvD,OAAO,CAAC,GAAG,CAAC,UAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,qBAAkB,CAAC,CAAC;wBACxD,qBAAM,IAAI,OAAO,CAAC,UAAC,OAAO;gCACzC,KAAI,CAAC,YAAY,CAAC,WAAW,CAC5B,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAC/B,UAAC,QAAgD;oCAChD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;wCACvB,OAAO,CAAC,KAAK,CACZ,gCAAgC,EAChC,QAAQ,CAAC,OAAO,CAChB,CAAC;wCACF,OAAO,CAAC,KAAK,CAAC,CAAC;oCAChB,CAAC;yCAAM,CAAC;wCACP,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;wCACnD,OAAO,CAAC,IAAI,CAAC,CAAC;oCACf,CAAC;gCACF,CAAC,CACD,CAAC;4BACH,CAAC,CAAC,EAAA;;wBAhBI,OAAO,GAAG,SAgBd;wBACF,IAAI,CAAC,OAAO;4BAAE,sBAAO;wBAErB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;wBACvC,qBAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAA;;wBAA9B,SAA8B,CAAC;wBAE/B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;;;;;KACjC;IACF,WAAC;AAAD,CAAC,AArDD,IAqDC;AArDY,oBAAI"}
|
||||
89
dist/Unity/UnityRunner.js
vendored
89
dist/Unity/UnityRunner.js
vendored
@@ -104,6 +104,52 @@ var UnityRunner = /** @class */ (function () {
|
||||
else
|
||||
console.log(PREFIX, message !== null && message !== void 0 ? message : error);
|
||||
};
|
||||
UnityRunner.prototype.stop = function () {
|
||||
return __awaiter(this, void 0, void 0, function () {
|
||||
var quitSucceeded;
|
||||
var _this = this;
|
||||
return __generator(this, function (_a) {
|
||||
switch (_a.label) {
|
||||
case 0:
|
||||
if (this.process == null)
|
||||
return [2 /*return*/];
|
||||
this.restartTriggered = true;
|
||||
if (this._Main.UnityWebSocket.state === 'CONNECTED') {
|
||||
this._Main.UnityWebSocket.quitApplication();
|
||||
this.setInfo('Requested quit through WebSocket...', null, 'STARTING');
|
||||
}
|
||||
else {
|
||||
this.process.kill('SIGTERM');
|
||||
this.setInfo('Requested quit through SIGTERM...', null, 'STARTING');
|
||||
}
|
||||
return [4 /*yield*/, new Promise(function (resolve) {
|
||||
var timeout = setTimeout(function () {
|
||||
clearInterval(c);
|
||||
resolve(false);
|
||||
}, 5000);
|
||||
var c = setInterval(function () {
|
||||
if (_this.process != null &&
|
||||
!_this.process.killed &&
|
||||
_this.process.exitCode == null)
|
||||
return;
|
||||
clearTimeout(timeout);
|
||||
clearInterval(c);
|
||||
resolve(true);
|
||||
});
|
||||
})];
|
||||
case 1:
|
||||
quitSucceeded = _a.sent();
|
||||
if (!quitSucceeded)
|
||||
this.process.kill('SIGKILL');
|
||||
this.setInfo('Stopped', null, 'STOPPED');
|
||||
this._Main.UnityWebSocket.disconnect();
|
||||
this._Main.WebServer.Calibration.hasCalibrationImage = false;
|
||||
this.startTime = -1;
|
||||
return [2 /*return*/];
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
UnityRunner.prototype.restart = function () {
|
||||
return __awaiter(this, arguments, void 0, function (instant) {
|
||||
if (instant === void 0) { instant = false; }
|
||||
@@ -112,42 +158,41 @@ var UnityRunner = /** @class */ (function () {
|
||||
case 0:
|
||||
if (this.restartTriggered)
|
||||
return [2 /*return*/];
|
||||
clearInterval(this.statusClock);
|
||||
this._Main.WebServer.Calibration.hasCalibrationImage = false;
|
||||
this._Main.UnityWebSocket.disconnect();
|
||||
this.restartTriggered = true;
|
||||
clearInterval(this.statusClock);
|
||||
this.startTime = -1;
|
||||
this.broadcastState();
|
||||
if (!!instant) return [3 /*break*/, 2];
|
||||
return [4 /*yield*/, (0, Utils_1.delay)(2000)];
|
||||
case 1:
|
||||
_a.sent();
|
||||
_a.label = 2;
|
||||
case 2:
|
||||
if (this.output.current.length > 0) {
|
||||
this.output.last = __spreadArray([], this.output.current, true);
|
||||
this.output.current = [];
|
||||
}
|
||||
if (instant)
|
||||
this.setInfo('Process will restart shortly...', null, 'STOPPED');
|
||||
if (!(this.process != null)) return [3 /*break*/, 3];
|
||||
this.process.kill('SIGTERM');
|
||||
return [4 /*yield*/, (0, Utils_1.delay)(3000)];
|
||||
case 2:
|
||||
_a.sent();
|
||||
if (!this.process.killed && this.process.exitCode === null) {
|
||||
this.process.kill('SIGKILL');
|
||||
console.log(PREFIX, 'Sent SIGKILL to process.');
|
||||
}
|
||||
_a.label = 3;
|
||||
return [4 /*yield*/, this.stop()];
|
||||
case 3:
|
||||
this.startTime = -1;
|
||||
if (!!instant) return [3 /*break*/, 5];
|
||||
_a.sent();
|
||||
if (!instant) return [3 /*break*/, 6];
|
||||
return [4 /*yield*/, (0, Utils_1.delay)(1000)];
|
||||
case 4:
|
||||
_a.sent();
|
||||
this.setInfo('Process will restart shortly...', null, 'STOPPED');
|
||||
return [4 /*yield*/, (0, Utils_1.delay)(2000)];
|
||||
case 5:
|
||||
_a.sent();
|
||||
return [3 /*break*/, 8];
|
||||
case 6:
|
||||
this.message = 'Reconnecting in 10 seconds...';
|
||||
this.broadcastState();
|
||||
return [4 /*yield*/, (0, Utils_1.delay)(10000)];
|
||||
case 4:
|
||||
case 7:
|
||||
_a.sent();
|
||||
_a.label = 5;
|
||||
case 5: return [4 /*yield*/, this.start()];
|
||||
case 6:
|
||||
_a.label = 8;
|
||||
case 8: return [4 /*yield*/, this.start()];
|
||||
case 9:
|
||||
_a.sent();
|
||||
return [2 /*return*/];
|
||||
}
|
||||
@@ -214,7 +259,7 @@ var UnityRunner = /** @class */ (function () {
|
||||
this.process.on('exit', function (code, signal) {
|
||||
if (_this.restartTriggered)
|
||||
return;
|
||||
_this.setInfo('Process exited', "Process exited with code ".concat(code, " and signal ").concat(signal), 'STOPPED');
|
||||
_this.setInfo('Process exited', "Process exited with code ".concat(code, " and signal ").concat(signal), 'PROBLEM');
|
||||
_this.restart();
|
||||
});
|
||||
this.process.on('error', function (err) {
|
||||
|
||||
2
dist/Unity/UnityRunner.js.map
vendored
2
dist/Unity/UnityRunner.js.map
vendored
File diff suppressed because one or more lines are too long
84
dist/Unity/UnityWebSocket.js
vendored
84
dist/Unity/UnityWebSocket.js
vendored
@@ -1,4 +1,15 @@
|
||||
"use strict";
|
||||
var __assign = (this && this.__assign) || function () {
|
||||
__assign = Object.assign || function(t) {
|
||||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||||
s = arguments[i];
|
||||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
||||
t[p] = s[p];
|
||||
}
|
||||
return t;
|
||||
};
|
||||
return __assign.apply(this, arguments);
|
||||
};
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
@@ -51,7 +62,9 @@ var UnityWebSocket = /** @class */ (function () {
|
||||
zedPath: '',
|
||||
zedReady: false,
|
||||
zedFPS: '-',
|
||||
parameters: [],
|
||||
outOfService: null,
|
||||
sliders: [],
|
||||
sensors: [],
|
||||
};
|
||||
this.disconnected = false;
|
||||
this.restartRequested = false;
|
||||
@@ -66,22 +79,54 @@ var UnityWebSocket = /** @class */ (function () {
|
||||
case 'parameterValue':
|
||||
var sliderIndex = args[0];
|
||||
var percentage = args[1];
|
||||
if (this.parameters.parameters[sliderIndex] == undefined)
|
||||
this.setSliderValue(sliderIndex, percentage);
|
||||
break;
|
||||
case 'enableOutOfService':
|
||||
var enableCallback = args[0];
|
||||
if (typeof enableCallback !== 'function')
|
||||
return;
|
||||
this.parameters.parameters[sliderIndex].outputValue =
|
||||
percentage;
|
||||
if (this.socket == null ||
|
||||
this.socket.readyState !== ws_1.WebSocket.OPEN)
|
||||
this.setOutOfService(true);
|
||||
enableCallback({ succeed: true });
|
||||
break;
|
||||
case 'disableOutOfService':
|
||||
var disableCallback = args[0];
|
||||
if (typeof disableCallback !== 'function')
|
||||
return;
|
||||
this.socket.send(JSON.stringify({
|
||||
type: 'set_slider_value',
|
||||
sliderIndex: sliderIndex,
|
||||
sliderValue: percentage,
|
||||
}));
|
||||
this.broadcastState();
|
||||
this.setOutOfService(false);
|
||||
disableCallback({ succeed: true });
|
||||
break;
|
||||
}
|
||||
};
|
||||
UnityWebSocket.prototype.quitApplication = function () {
|
||||
if (this.socket == null || this.socket.readyState !== ws_1.WebSocket.OPEN)
|
||||
return;
|
||||
this.socket.send(JSON.stringify({
|
||||
type: 'quit_application',
|
||||
}));
|
||||
};
|
||||
UnityWebSocket.prototype.setSliderValue = function (sliderIndex, sliderValue) {
|
||||
if (this.socket == null || this.socket.readyState !== ws_1.WebSocket.OPEN)
|
||||
return;
|
||||
this.socket.send(JSON.stringify({
|
||||
type: 'set_slider_value',
|
||||
sliderIndex: sliderIndex,
|
||||
sliderValue: sliderValue,
|
||||
}));
|
||||
if (this.parameters.sliders[sliderIndex] == undefined)
|
||||
return;
|
||||
this.parameters.sliders[sliderIndex].outputValue = sliderValue;
|
||||
this.broadcastState();
|
||||
};
|
||||
UnityWebSocket.prototype.setOutOfService = function (state) {
|
||||
if (this.socket == null || this.socket.readyState !== ws_1.WebSocket.OPEN)
|
||||
return;
|
||||
this.socket.send(JSON.stringify({
|
||||
type: 'set_out_of_service',
|
||||
showOutOfService: state,
|
||||
}));
|
||||
this.parameters.outOfService = true;
|
||||
this.broadcastState();
|
||||
};
|
||||
UnityWebSocket.prototype.broadcastState = function () {
|
||||
this._Main.WebServer.socket.emit('unityWebSocketState', this.getState());
|
||||
};
|
||||
@@ -101,6 +146,7 @@ var UnityWebSocket = /** @class */ (function () {
|
||||
clearInterval(this.calibrationImageClock);
|
||||
};
|
||||
UnityWebSocket.prototype.handleSocketMessage = function (data) {
|
||||
var _a;
|
||||
var message;
|
||||
try {
|
||||
message = JSON.parse(data.toString());
|
||||
@@ -120,7 +166,17 @@ var UnityWebSocket = /** @class */ (function () {
|
||||
this.parameters.zedReady =
|
||||
message.heartbeat.zedCamera.isZedReady;
|
||||
this.parameters.zedFPS = message.heartbeat.zedCamera.cameraFPS;
|
||||
this.parameters.parameters = message.heartbeat.dataSliders;
|
||||
this.parameters.outOfService =
|
||||
(_a = message.heartbeat.showOutOfService) !== null && _a !== void 0 ? _a : false;
|
||||
this.parameters.sensors = message.heartbeat.dataSensors;
|
||||
this.parameters.sliders = message.heartbeat.dataSliders.map(function (slider) {
|
||||
var _a, _b, _c, _d, _e, _f, _g;
|
||||
return __assign(__assign({}, slider), { min: (_a = slider.min) !== null && _a !== void 0 ? _a : 0, max: (_b = slider.max) !== null && _b !== void 0 ? _b : 1, unit: (_c = slider.unit) !== null && _c !== void 0 ? _c : '%', visualMultiplier: ((_d = slider.min) !== null && _d !== void 0 ? _d : 0) == 0 && ((_e = slider.max) !== null && _e !== void 0 ? _e : 1) == 1
|
||||
? 100
|
||||
: null, decimalPlaces: ((_f = slider.min) !== null && _f !== void 0 ? _f : 0) == 0 && ((_g = slider.max) !== null && _g !== void 0 ? _g : 1) == 1
|
||||
? 0
|
||||
: 2 });
|
||||
});
|
||||
this.broadcastState();
|
||||
break;
|
||||
case 'response_camera_frame':
|
||||
@@ -203,6 +259,8 @@ var UnityWebSocket = /** @class */ (function () {
|
||||
_this.setInfo('Connected', null, 'CONNECTED');
|
||||
});
|
||||
this.socket.on('close', function () {
|
||||
if (_this._Main.UnityRunner.restartTriggered)
|
||||
return;
|
||||
if (_this.restartRequested)
|
||||
return;
|
||||
_this.setInfo('Disconnected', 'Unity was disconnected unexpectedly', 'FAILED');
|
||||
|
||||
2
dist/Unity/UnityWebSocket.js.map
vendored
2
dist/Unity/UnityWebSocket.js.map
vendored
File diff suppressed because one or more lines are too long
10
dist/WebServer/WebServer.js
vendored
10
dist/WebServer/WebServer.js
vendored
@@ -36,6 +36,16 @@ var WebServer = /** @class */ (function () {
|
||||
socket.emit('cameraRunnerState', _this._Main.CameraRunner.getState());
|
||||
socket.emit('unityRunnerState', _this._Main.UnityRunner.getStatus());
|
||||
socket.emit('unityWebSocketState', _this._Main.UnityWebSocket.getState());
|
||||
socket.emit('supportNumber', _this._Main.Config.support.telephone.replace('+', ''));
|
||||
socket.on('restartInstallation', function (callback) {
|
||||
if (_this._Main.CameraRunner.state !== 'CONNECTED')
|
||||
return callback({
|
||||
succeed: false,
|
||||
message: 'Cannot reboot camera runner because it is not connected.',
|
||||
});
|
||||
_this._Main.restart();
|
||||
callback({ succeed: true });
|
||||
});
|
||||
socket.on('cameraRunner', function (command) {
|
||||
var _a;
|
||||
var args = [];
|
||||
|
||||
2
dist/WebServer/WebServer.js.map
vendored
2
dist/WebServer/WebServer.js.map
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"WebServer.js","sourceRoot":"","sources":["../../src/WebServer/WebServer.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"WebServer.js","sourceRoot":"","sources":["../../src/WebServer/WebServer.ts"],"names":[],"mappings":"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"}
|
||||
187
frontend/views/dashboard/dist/dashboard.unity.js
vendored
187
frontend/views/dashboard/dist/dashboard.unity.js
vendored
@@ -48,6 +48,10 @@ var DashboardUnity = /** @class */ (function () {
|
||||
this.uptimeInfo = document.querySelector('.ntsh_dashboard-unity-uptime');
|
||||
this.webSocketStatus = document.querySelector('.ntsh_dashboard-unity-websocketstatus');
|
||||
this.webSocketInfo = document.querySelector('.ntsh_dashboard-unity-websocketinfo');
|
||||
this.outOfServiceStatus = document.querySelector('.ntsh_dashboard-unity-outofservicestatus');
|
||||
this.outOfServiceInfo = document.querySelector('.ntsh_dashboard-unity-outofserviceinfo');
|
||||
this.enableOutOfServiceButton = document.querySelector('.ntsh_dashboard-unity-enableoutofservice');
|
||||
this.disableOutOfServiceButton = document.querySelector('.ntsh_dashboard-unity-disableoutofservice');
|
||||
this.zedStreamStatus = document.querySelector('.ntsh_dashboard-unity-zedstreamstatus');
|
||||
this.zedStreamInfo = document.querySelector('.ntsh_dashboard-unity-zedstreaminfo');
|
||||
this.zedStreamFps = document.querySelector('.ntsh_dashboard-unity-zedstreamfps');
|
||||
@@ -56,6 +60,7 @@ var DashboardUnity = /** @class */ (function () {
|
||||
this.timelineStanding = document.querySelector('.ntsh_dashboard-unity-timeline-standing');
|
||||
this.timelineProgress = document.querySelector('.ntsh_dashboard-unity-timeline-progress');
|
||||
this.parametersTable = document.querySelector('.ntsh_dashboard-unity-parameters');
|
||||
this.sensorsTable = document.querySelector('.ntsh_dashboard-unity-sensors');
|
||||
this.errorContainer = document.querySelector('.ntsh_dashboard-unity-error');
|
||||
this.errorText = document.querySelector('.ntsh_dashboard-unity-errortext');
|
||||
this._Main = Main;
|
||||
@@ -73,7 +78,7 @@ var DashboardUnity = /** @class */ (function () {
|
||||
}
|
||||
(0, utils_1.setStatusState)(this.processStatus, {
|
||||
RUNNING: 'green',
|
||||
STOPPED: 'red',
|
||||
STOPPED: 'gray',
|
||||
STARTING: 'yellow',
|
||||
PROBLEM: 'red',
|
||||
}[state.state]);
|
||||
@@ -99,6 +104,28 @@ var DashboardUnity = /** @class */ (function () {
|
||||
FAILED: 'red',
|
||||
}[state.state]);
|
||||
this.webSocketInfo.innerText = (_a = state.message) !== null && _a !== void 0 ? _a : '';
|
||||
// ----------- Out of Service -----------
|
||||
(0, utils_1.setStatusState)(this.outOfServiceStatus, state.parameters.outOfService == null
|
||||
? 'gray'
|
||||
: state.parameters.outOfService
|
||||
? 'red'
|
||||
: 'green');
|
||||
this.outOfServiceInfo.innerText =
|
||||
state.parameters.outOfService == null
|
||||
? ''
|
||||
: state.parameters.outOfService
|
||||
? 'Out of Service'
|
||||
: 'Operational';
|
||||
this.enableOutOfServiceButton.style.display =
|
||||
state.parameters.outOfService == null ||
|
||||
state.parameters.outOfService
|
||||
? 'none'
|
||||
: 'flex';
|
||||
this.disableOutOfServiceButton.style.display =
|
||||
state.parameters.outOfService &&
|
||||
state.parameters.outOfService != null
|
||||
? 'flex'
|
||||
: 'none';
|
||||
// ----------- ZED Stream -----------
|
||||
(0, utils_1.setStatusState)(this.zedStreamStatus, state.parameters.zedReady ? 'green' : 'red');
|
||||
this.zedStreamInfo.innerText = state.parameters.zedReady
|
||||
@@ -113,9 +140,10 @@ var DashboardUnity = /** @class */ (function () {
|
||||
this.timelineStanding.innerText = state.parameters.timelineStanding
|
||||
? 'Yes'
|
||||
: 'No';
|
||||
(0, utils_1.setProgressState)(this.timelineProgress, state.parameters.timelineProgress);
|
||||
(0, utils_1.setProgressState)(this.timelineProgress, Math.round(state.parameters.timelineProgress * 100), 0, 100, '%');
|
||||
// ----------- Parameters -----------
|
||||
this.renderParameterSliders(state.parameters.parameters);
|
||||
this.renderParameterSliders(state.state == 'CONNECTED' ? state.parameters.sliders : []);
|
||||
this.renderParameterSensors(state.state == 'CONNECTED' ? state.parameters.sensors : []);
|
||||
// ----------- Error -----------
|
||||
if (((_b = state === null || state === void 0 ? void 0 : state.error) !== null && _b !== void 0 ? _b : '').trim().length > 0)
|
||||
this.webSocketError = state.error;
|
||||
@@ -123,55 +151,107 @@ var DashboardUnity = /** @class */ (function () {
|
||||
this.webSocketError = null;
|
||||
this.updateError();
|
||||
};
|
||||
DashboardUnity.prototype.renderParameterSliders = function (parameters) {
|
||||
DashboardUnity.prototype.renderParameterSliders = function (sliders) {
|
||||
var _this = this;
|
||||
if (parameters.length === 0)
|
||||
return;
|
||||
var existingSliders = this.parametersTable.querySelectorAll('.ntsh_dashboard-unity-parameter-row');
|
||||
if (existingSliders.length !== parameters.length) {
|
||||
if (existingSliders.length !== sliders.length) {
|
||||
this.parametersTable.innerHTML = '';
|
||||
parameters.forEach(function (param) {
|
||||
var row = (0, morphux_1.ce)('tr', 'ntsh_dashboard-unity-parameter-row');
|
||||
var nameCell = (0, morphux_1.ce)('td');
|
||||
nameCell.appendChild((0, morphux_1.ce)('div', 'mux_text', null, param.sliderName));
|
||||
row.appendChild(nameCell);
|
||||
var progressCell = (0, morphux_1.ce)('td', 'no-service');
|
||||
progressCell.appendChild((0, utils_1.createProgress)(param.outputValue));
|
||||
row.appendChild(progressCell);
|
||||
var sliderCell = (0, morphux_1.ce)('td', 'only-service');
|
||||
var sliderProgress = (0, utils_1.createProgress)(param.outputValue);
|
||||
var sliderValue = sliderProgress.querySelector('.ntsh_progress-value');
|
||||
sliderValue.classList.add('mux_resizer');
|
||||
sliderCell.appendChild(sliderProgress);
|
||||
var resizer = new morphux_1.MorphComponent.Resizer({
|
||||
existingContainer: sliderValue,
|
||||
direction: 'right',
|
||||
relative: true,
|
||||
min: 0,
|
||||
max: function () { return sliderProgress.clientWidth; },
|
||||
if (sliders.length === 0) {
|
||||
var row = (0, morphux_1.ce)('tr');
|
||||
var cell = (0, morphux_1.ce)('td');
|
||||
cell.appendChild((0, morphux_1.ce)('div', ['mux_text', 'ntsh_dashboard-unity-parameters-loading'], null, 'Waiting for Unity...'));
|
||||
row.appendChild(cell);
|
||||
this.parametersTable.appendChild(row);
|
||||
}
|
||||
else
|
||||
sliders.forEach(function (slider) {
|
||||
var _a, _b;
|
||||
var multiplierFactor = (_a = slider.visualMultiplier) !== null && _a !== void 0 ? _a : 1;
|
||||
var decimalPlacesFactor = Math.pow(10, ((_b = slider.decimalPlaces) !== null && _b !== void 0 ? _b : 0));
|
||||
var value = Math.round(slider.outputValue *
|
||||
multiplierFactor *
|
||||
decimalPlacesFactor) / decimalPlacesFactor;
|
||||
var row = (0, morphux_1.ce)('tr', 'ntsh_dashboard-unity-parameter-row');
|
||||
var nameCell = (0, morphux_1.ce)('td');
|
||||
nameCell.appendChild((0, morphux_1.ce)('div', 'mux_text', null, slider.sliderName));
|
||||
row.appendChild(nameCell);
|
||||
var progressCell = (0, morphux_1.ce)('td', 'no-service');
|
||||
progressCell.appendChild((0, utils_1.createProgress)(value, slider.min * multiplierFactor, slider.max * multiplierFactor, slider.unit));
|
||||
row.appendChild(progressCell);
|
||||
var sliderCell = (0, morphux_1.ce)('td', 'only-service');
|
||||
var sliderProgress = (0, utils_1.createProgress)(value, slider.min * multiplierFactor, slider.max * multiplierFactor, slider.unit);
|
||||
var sliderValue = sliderProgress.querySelector('.ntsh_progress-value');
|
||||
sliderValue.classList.add('mux_resizer');
|
||||
sliderCell.appendChild(sliderProgress);
|
||||
var resizer = new morphux_1.MorphComponent.Resizer({
|
||||
existingContainer: sliderValue,
|
||||
direction: 'right',
|
||||
relative: true,
|
||||
min: 0,
|
||||
max: function () { return sliderProgress.clientWidth; },
|
||||
});
|
||||
var lastValue = -1;
|
||||
resizer.on('resized', function (size) {
|
||||
var percentage = Math.round((size / sliderProgress.clientWidth) * 100) / 100;
|
||||
var actualValue = slider.min + percentage * (slider.max - slider.min);
|
||||
if (actualValue === lastValue)
|
||||
return;
|
||||
lastValue = actualValue;
|
||||
_this._Main.socket.emit('unityWebSocket', 'parameterValue', slider.sliderIndex, actualValue);
|
||||
(0, utils_1.setProgressState)(sliderProgress, Math.round(actualValue *
|
||||
multiplierFactor *
|
||||
decimalPlacesFactor) / decimalPlacesFactor, slider.min * multiplierFactor, slider.max * multiplierFactor, slider.unit);
|
||||
});
|
||||
row.appendChild(sliderCell);
|
||||
_this.parametersTable.appendChild(row);
|
||||
});
|
||||
var lastPercentage = -1;
|
||||
resizer.on('resized', function (size) {
|
||||
var percentage = Math.round((size / sliderProgress.clientWidth) * 100) /
|
||||
100;
|
||||
if (percentage === lastPercentage)
|
||||
return;
|
||||
lastPercentage = percentage;
|
||||
_this._Main.socket.emit('unityWebSocket', 'parameterValue', param.sliderIndex, percentage);
|
||||
(0, utils_1.setProgressState)(sliderProgress, percentage);
|
||||
});
|
||||
row.appendChild(sliderCell);
|
||||
_this.parametersTable.appendChild(row);
|
||||
});
|
||||
}
|
||||
else {
|
||||
existingSliders.forEach(function (row, index) {
|
||||
var value = parameters[index].outputValue;
|
||||
var _a, _b;
|
||||
var slider = sliders[index];
|
||||
var multiplierFactor = (_a = slider.visualMultiplier) !== null && _a !== void 0 ? _a : 1;
|
||||
var decimalPlacesFactor = Math.pow(10, ((_b = slider.decimalPlaces) !== null && _b !== void 0 ? _b : 0));
|
||||
var value = Math.round(slider.outputValue *
|
||||
multiplierFactor *
|
||||
decimalPlacesFactor) / decimalPlacesFactor;
|
||||
var progressElement = row.querySelector('.no-service .ntsh_progress');
|
||||
(0, utils_1.setProgressState)(progressElement, value);
|
||||
(0, utils_1.setProgressState)(progressElement, value, slider.min * multiplierFactor, slider.max * multiplierFactor, slider.unit);
|
||||
var sliderElement = row.querySelector('.only-service .ntsh_progress');
|
||||
if (sliderElement.querySelector('.mux_resizer-moving') == null)
|
||||
(0, utils_1.setProgressState)(sliderElement, value);
|
||||
(0, utils_1.setProgressState)(sliderElement, value, slider.min * multiplierFactor, slider.max * multiplierFactor, slider.unit);
|
||||
});
|
||||
}
|
||||
};
|
||||
DashboardUnity.prototype.renderParameterSensors = function (sensors) {
|
||||
var _this = this;
|
||||
var existingSensors = this.sensorsTable.querySelectorAll('.ntsh_dashboard-unity-sensor-row');
|
||||
if (existingSensors.length !== sensors.length) {
|
||||
this.sensorsTable.innerHTML = '';
|
||||
if (sensors.length === 0) {
|
||||
var row = (0, morphux_1.ce)('tr');
|
||||
var cell = (0, morphux_1.ce)('td');
|
||||
cell.appendChild((0, morphux_1.ce)('div', ['mux_text', 'ntsh_dashboard-unity-sensors-loading'], null, 'Waiting for Unity...'));
|
||||
row.appendChild(cell);
|
||||
this.sensorsTable.appendChild(row);
|
||||
}
|
||||
else
|
||||
sensors.forEach(function (sensor) {
|
||||
var row = (0, morphux_1.ce)('tr', 'ntsh_dashboard-unity-sensor-row');
|
||||
var nameCell = (0, morphux_1.ce)('td');
|
||||
nameCell.appendChild((0, morphux_1.ce)('div', 'mux_text', null, sensor.deviceName));
|
||||
row.appendChild(nameCell);
|
||||
var progressCell = (0, morphux_1.ce)('td');
|
||||
progressCell.appendChild((0, utils_1.createProgress)(Math.round(sensor.outputValue * 100), 0, 100, '%'));
|
||||
row.appendChild(progressCell);
|
||||
_this.sensorsTable.appendChild(row);
|
||||
});
|
||||
}
|
||||
else {
|
||||
existingSensors.forEach(function (row, index) {
|
||||
var value = sensors[index].outputValue;
|
||||
var progressElement = row.querySelector('.ntsh_progress');
|
||||
(0, utils_1.setProgressState)(progressElement, Math.round(value * 100), 0, 100, '%');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -202,10 +282,23 @@ var DashboardUnity = /** @class */ (function () {
|
||||
return [2 /*return*/];
|
||||
});
|
||||
}); });
|
||||
this.enableOutOfServiceButton.addEventListener('click', function () { return __awaiter(_this, void 0, void 0, function () {
|
||||
return __generator(this, function (_a) {
|
||||
this.executeCommand('enableOutOfService', 'Are you sure you want to set the installation to "Out of Service"?', 'unityWebSocket');
|
||||
return [2 /*return*/];
|
||||
});
|
||||
}); });
|
||||
this.disableOutOfServiceButton.addEventListener('click', function () { return __awaiter(_this, void 0, void 0, function () {
|
||||
return __generator(this, function (_a) {
|
||||
this.executeCommand('disableOutOfService', 'Are you sure you want to set the installation to "Operational"?', 'unityWebSocket');
|
||||
return [2 /*return*/];
|
||||
});
|
||||
}); });
|
||||
};
|
||||
DashboardUnity.prototype.executeCommand = function (command, message) {
|
||||
return __awaiter(this, void 0, void 0, function () {
|
||||
DashboardUnity.prototype.executeCommand = function (command_1, message_1) {
|
||||
return __awaiter(this, arguments, void 0, function (command, message, type) {
|
||||
var confirmed;
|
||||
if (type === void 0) { type = 'unityRunner'; }
|
||||
return __generator(this, function (_a) {
|
||||
switch (_a.label) {
|
||||
case 0: return [4 /*yield*/, morphux_1.MorphFeature.Confirm({
|
||||
@@ -218,9 +311,9 @@ var DashboardUnity = /** @class */ (function () {
|
||||
return [2 /*return*/];
|
||||
morphux_1.MorphFeature.Loader({
|
||||
active: true,
|
||||
message: "Requesting Unity Runner ".concat(command, "..."),
|
||||
message: "Dispatching command...",
|
||||
});
|
||||
this._Main.socket.emit('unityRunner', command, function (response) {
|
||||
this._Main.socket.emit(type, command, function (response) {
|
||||
morphux_1.MorphFeature.Loader({ active: false });
|
||||
if (!response.succeed)
|
||||
return morphux_1.MorphFeature.Alert({
|
||||
@@ -229,7 +322,7 @@ var DashboardUnity = /** @class */ (function () {
|
||||
});
|
||||
morphux_1.MorphFeature.Notification({
|
||||
level: 'success',
|
||||
message: "Unity Runner is ".concat(command, "ing..."),
|
||||
message: "Dispatched command",
|
||||
});
|
||||
});
|
||||
return [2 /*return*/];
|
||||
|
||||
File diff suppressed because one or more lines are too long
106
frontend/views/dashboard/dist/menubar.js
vendored
106
frontend/views/dashboard/dist/menubar.js
vendored
@@ -45,6 +45,9 @@ var MenuBar = /** @class */ (function () {
|
||||
this.container = document.querySelector('.ntsh_menubar');
|
||||
this._Main = main;
|
||||
this.build();
|
||||
this._Main.socket.on('supportNumber', function (number) {
|
||||
_this.supportNumber = number;
|
||||
});
|
||||
setTimeout(function () {
|
||||
if ((localStorage === null || localStorage === void 0 ? void 0 : localStorage.getItem('serviceMode')) === 'true')
|
||||
_this.toggleServiceMode(true, true);
|
||||
@@ -53,10 +56,49 @@ var MenuBar = /** @class */ (function () {
|
||||
MenuBar.prototype.build = function () {
|
||||
var _this = this;
|
||||
this.menubar = new Component_MenuBar_1.ComponentMenuBar({
|
||||
mobile: {
|
||||
left: [
|
||||
{
|
||||
type: 'icon',
|
||||
text: 'Restart',
|
||||
materialIcon: 'restart_alt',
|
||||
uniqueIdentifier: 'restart_installation',
|
||||
click: function () { return __awaiter(_this, void 0, void 0, function () {
|
||||
var mobileMenu;
|
||||
return __generator(this, function (_a) {
|
||||
mobileMenu = document.querySelector('.mux_mobilemenu');
|
||||
mobileMenu === null || mobileMenu === void 0 ? void 0 : mobileMenu.click();
|
||||
this.restartInstallation();
|
||||
return [2 /*return*/];
|
||||
});
|
||||
}); },
|
||||
},
|
||||
],
|
||||
right: [
|
||||
{
|
||||
type: 'icon',
|
||||
text: 'Support',
|
||||
materialIcon: 'call_quality',
|
||||
uniqueIdentifier: 'call_support',
|
||||
click: function () { return _this.showSupport(); },
|
||||
},
|
||||
],
|
||||
},
|
||||
left: [
|
||||
{
|
||||
type: 'image',
|
||||
url: '/img/morphix_logo_white.png',
|
||||
type: 'normal',
|
||||
text: 'Restart',
|
||||
materialIcon: 'restart_alt',
|
||||
uniqueIdentifier: 'restart_installation',
|
||||
click: function () { return __awaiter(_this, void 0, void 0, function () {
|
||||
var mobileMenu;
|
||||
return __generator(this, function (_a) {
|
||||
mobileMenu = document.querySelector('.mux_mobilemenu');
|
||||
mobileMenu === null || mobileMenu === void 0 ? void 0 : mobileMenu.click();
|
||||
this.restartInstallation();
|
||||
return [2 /*return*/];
|
||||
});
|
||||
}); },
|
||||
},
|
||||
{
|
||||
type: 'normal',
|
||||
@@ -92,7 +134,16 @@ var MenuBar = /** @class */ (function () {
|
||||
],
|
||||
right: [
|
||||
{
|
||||
type: 'normal',
|
||||
type: 'icon',
|
||||
text: 'Support',
|
||||
materialIcon: 'call_quality',
|
||||
uniqueIdentifier: 'call_support',
|
||||
click: function () { return _this.showSupport(); },
|
||||
},
|
||||
{
|
||||
type: document.body.classList.contains('ntsh_service')
|
||||
? 'normal'
|
||||
: 'icon',
|
||||
text: document.body.classList.contains('ntsh_service')
|
||||
? 'Exit Service'
|
||||
: 'Service Mode',
|
||||
@@ -115,6 +166,55 @@ var MenuBar = /** @class */ (function () {
|
||||
this.container.innerHTML = '';
|
||||
this.container.appendChild(this.menubar.container);
|
||||
};
|
||||
MenuBar.prototype.showSupport = function () {
|
||||
return __awaiter(this, void 0, void 0, function () {
|
||||
var dialog, callAnchor;
|
||||
return __generator(this, function (_a) {
|
||||
dialog = new morphux_1.MorphComponent.Dialog({
|
||||
title: 'Contact Support',
|
||||
width: 'medium',
|
||||
height: 'auto',
|
||||
okButtonVisible: false,
|
||||
cancelButtonVisible: false,
|
||||
});
|
||||
this.supportNumber.slice();
|
||||
callAnchor = (0, morphux_1.ce)('a', 'ntsh_callanchor', { href: "tel:".concat(this.supportNumber) }, "+".concat(this.supportNumber));
|
||||
dialog.content.appendChild(callAnchor);
|
||||
setTimeout(function () { return callAnchor.click(); }, 100);
|
||||
return [2 /*return*/];
|
||||
});
|
||||
});
|
||||
};
|
||||
MenuBar.prototype.restartInstallation = function () {
|
||||
return __awaiter(this, void 0, void 0, function () {
|
||||
var confirmed;
|
||||
return __generator(this, function (_a) {
|
||||
switch (_a.label) {
|
||||
case 0: return [4 /*yield*/, morphux_1.MorphFeature.Confirm({
|
||||
title: 'Restart Installation',
|
||||
message: 'Are you sure you want to restart the installation?',
|
||||
})];
|
||||
case 1:
|
||||
confirmed = _a.sent();
|
||||
if (!confirmed)
|
||||
return [2 /*return*/];
|
||||
morphux_1.MorphFeature.Loader({
|
||||
active: true,
|
||||
message: 'Restarting installation...',
|
||||
});
|
||||
this._Main.socket.emit('restartInstallation', function (response) {
|
||||
morphux_1.MorphFeature.Loader({ active: false });
|
||||
if (!response.succeed)
|
||||
return morphux_1.MorphFeature.Alert({
|
||||
title: 'Error',
|
||||
message: response.message,
|
||||
});
|
||||
});
|
||||
return [2 /*return*/];
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
MenuBar.prototype.toggleServiceMode = function (mode, skipPin) {
|
||||
return __awaiter(this, void 0, void 0, function () {
|
||||
var newMode, servicePin;
|
||||
|
||||
2
frontend/views/dashboard/dist/menubar.js.map
vendored
2
frontend/views/dashboard/dist/menubar.js.map
vendored
File diff suppressed because one or more lines are too long
13
frontend/views/dashboard/dist/utils.js
vendored
13
frontend/views/dashboard/dist/utils.js
vendored
@@ -21,18 +21,19 @@ var setStatusState = function (statusElement, state) {
|
||||
statusElement.classList.add("ntsh_status-".concat(state));
|
||||
};
|
||||
exports.setStatusState = setStatusState;
|
||||
var setProgressState = function (progressElement, percentage) {
|
||||
var value = progressElement.querySelector('.ntsh_progress-value');
|
||||
value.style.width = "".concat(percentage * 100, "%");
|
||||
var setProgressState = function (progressElement, value, min, max, unit) {
|
||||
var percentage = (value - min) / (max - min);
|
||||
var progressValue = progressElement.querySelector('.ntsh_progress-value');
|
||||
progressValue.style.width = "".concat(percentage * 100, "%");
|
||||
var label = progressElement.querySelector('.ntsh_progress-label');
|
||||
label.innerText = "".concat(Math.round(percentage * 100), "%");
|
||||
label.innerText = "".concat(value).concat(unit);
|
||||
};
|
||||
exports.setProgressState = setProgressState;
|
||||
var createProgress = function (value) {
|
||||
var createProgress = function (value, min, max, unit) {
|
||||
var progress = (0, morphux_1.ce)('div', 'ntsh_progress');
|
||||
progress.appendChild((0, morphux_1.ce)('div', 'ntsh_progress-value'));
|
||||
progress.appendChild((0, morphux_1.ce)('div', 'ntsh_progress-label'));
|
||||
(0, exports.setProgressState)(progress, value);
|
||||
(0, exports.setProgressState)(progress, value, min, max, unit);
|
||||
return progress;
|
||||
};
|
||||
exports.createProgress = createProgress;
|
||||
|
||||
2
frontend/views/dashboard/dist/utils.js.map
vendored
2
frontend/views/dashboard/dist/utils.js.map
vendored
@@ -1 +1 @@
|
||||
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../ts/utils.ts"],"names":[],"mappings":";;;AAgDA,sDAEC;AAQD,oCAkBC;AAED,sBAEC;AAhFD,mCAA6B;AAE7B;;;;;;GAMG;AACI,IAAM,IAAI,GAAG,UAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IACnD,OAAA,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AAAf,CAAe,CAAC;AADJ,QAAA,IAAI,QACA;AAEV,IAAM,cAAc,GAAG,UAC7B,aAA6B,EAC7B,KAAiB;IAEjB,aAAa,CAAC,SAAS,CAAC,MAAM,CAC7B,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,CAClB,CAAC;IACF,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAe,KAAK,CAAE,CAAC,CAAC;AACrD,CAAC,CAAC;AAXW,QAAA,cAAc,kBAWzB;AAGK,IAAM,gBAAgB,GAAG,UAC/B,eAA+B,EAC/B,UAAkB;IAElB,IAAM,KAAK,GAAmB,eAAe,CAAC,aAAa,CAC1D,sBAAsB,CACtB,CAAC;IACF,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,UAAG,UAAU,GAAG,GAAG,MAAG,CAAC;IAE3C,IAAM,KAAK,GAAmB,eAAe,CAAC,aAAa,CAC1D,sBAAsB,CACtB,CAAC;IACF,KAAK,CAAC,SAAS,GAAG,UAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,MAAG,CAAC;AACtD,CAAC,CAAC;AAbW,QAAA,gBAAgB,oBAa3B;AAEK,IAAM,cAAc,GAAG,UAAC,KAAa;IAC3C,IAAM,QAAQ,GAAG,IAAA,YAAE,EAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IAC5C,QAAQ,CAAC,WAAW,CAAC,IAAA,YAAE,EAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,WAAW,CAAC,IAAA,YAAE,EAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACvD,IAAA,wBAAgB,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAClC,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC;AANW,QAAA,cAAc,kBAMzB;AACF,SAAgB,qBAAqB,CAAC,MAAc;IACnD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAQD,SAAgB,YAAY,CAAC,OAAe;IAC3C,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3B,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;IACzC,OAAO,IAAI,KAAK,CAAC;IACjB,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACzC,OAAO,IAAI,IAAI,CAAC;IAChB,IAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IAEnC,IAAM,KAAK,GAAG,EAAE,CAAC;IACjB,IAAI,IAAI,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,UAAG,IAAI,MAAG,CAAC,CAAC;IAErC,KAAK,CAAC,IAAI,CACT,UAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,cAAI,OAAO;SAC7C,QAAQ,EAAE;SACV,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,cAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAC3D,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,SAAgB,KAAK,CAAC,QAAgB;IACrC,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,EAA7B,CAA6B,CAAC,CAAC;AAChE,CAAC"}
|
||||
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../ts/utils.ts"],"names":[],"mappings":"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"}
|
||||
@@ -138,6 +138,29 @@
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<div class="mux_text">Service</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="ntsh_status ntsh_dashboard-unity-outofservicestatus"></div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="ntsh_dashboard-unity-outofserviceinfo mux_text">
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="ntsh_buttons">
|
||||
<div class="ntsh_button mux_text ntsh_dashboard-unity-enableoutofservice">
|
||||
Set Out of Service
|
||||
</div>
|
||||
<div class="ntsh_button mux_text ntsh_dashboard-unity-disableoutofservice">
|
||||
Set Operational
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="ntsh_dashboard-error ntsh_dashboard-unity-error">
|
||||
@@ -229,6 +252,18 @@
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="ntsh_dashboard-box ntsh_dashboard-unitysensors">
|
||||
<div class="ntsh_dashboard-box-header mux_header">Sensors</div>
|
||||
|
||||
<table class="ntsh_vertical ntsh_dashboard-unity-sensors">
|
||||
<tr>
|
||||
<td>
|
||||
<div class="mux_text ntsh_dashboard-unity-sensors-loading">Waiting for Unity...
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -11628,6 +11628,17 @@
|
||||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||
};
|
||||
})();
|
||||
var __assign = (commonjsGlobal && commonjsGlobal.__assign) || function () {
|
||||
__assign = Object.assign || function(t) {
|
||||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||||
s = arguments[i];
|
||||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
||||
t[p] = s[p];
|
||||
}
|
||||
return t;
|
||||
};
|
||||
return __assign.apply(this, arguments);
|
||||
};
|
||||
Object.defineProperty(Component_MenuBar, "__esModule", { value: true });
|
||||
Component_MenuBar.ComponentMenuBar = void 0;
|
||||
var Index_1 = requireIndex();
|
||||
@@ -11854,15 +11865,27 @@
|
||||
var inner = (0, CE_1.ce)('div', 'mux_mobilemenu-inner');
|
||||
this.mobileMenu = new ComponentMenuBar({
|
||||
direction: 'vertical',
|
||||
left: this._leftItems.filter(function (item) {
|
||||
left: this._leftItems
|
||||
.filter(function (item) {
|
||||
if (item.uniqueIdentifier == undefined)
|
||||
return true;
|
||||
return !_this.mobileIgnoreItems.includes(item.uniqueIdentifier);
|
||||
})
|
||||
.map(function (item) {
|
||||
if (item.type !== 'icon')
|
||||
return item;
|
||||
return __assign(__assign({}, item), { type: 'normal' });
|
||||
}),
|
||||
right: this._rightItems.filter(function (item) {
|
||||
right: this._rightItems
|
||||
.filter(function (item) {
|
||||
if (item.uniqueIdentifier == undefined)
|
||||
return true;
|
||||
return !_this.mobileIgnoreItems.includes(item.uniqueIdentifier);
|
||||
})
|
||||
.map(function (item) {
|
||||
if (item.type !== 'icon')
|
||||
return item;
|
||||
return __assign(__assign({}, item), { type: 'normal' });
|
||||
}),
|
||||
});
|
||||
this.mobileMenu.setSelected(this.selected);
|
||||
@@ -14399,6 +14422,9 @@
|
||||
this.container = document.querySelector('.ntsh_menubar');
|
||||
this._Main = main;
|
||||
this.build();
|
||||
this._Main.socket.on('supportNumber', function (number) {
|
||||
_this.supportNumber = number;
|
||||
});
|
||||
setTimeout(function () {
|
||||
if ((localStorage === null || localStorage === void 0 ? void 0 : localStorage.getItem('serviceMode')) === 'true')
|
||||
_this.toggleServiceMode(true, true);
|
||||
@@ -14407,10 +14433,49 @@
|
||||
MenuBar.prototype.build = function () {
|
||||
var _this = this;
|
||||
this.menubar = new Component_MenuBar_1.ComponentMenuBar({
|
||||
mobile: {
|
||||
left: [
|
||||
{
|
||||
type: 'icon',
|
||||
text: 'Restart',
|
||||
materialIcon: 'restart_alt',
|
||||
uniqueIdentifier: 'restart_installation',
|
||||
click: function () { return __awaiter$4(_this, void 0, void 0, function () {
|
||||
var mobileMenu;
|
||||
return __generator$4(this, function (_a) {
|
||||
mobileMenu = document.querySelector('.mux_mobilemenu');
|
||||
mobileMenu === null || mobileMenu === void 0 ? void 0 : mobileMenu.click();
|
||||
this.restartInstallation();
|
||||
return [2 /*return*/];
|
||||
});
|
||||
}); },
|
||||
},
|
||||
],
|
||||
right: [
|
||||
{
|
||||
type: 'icon',
|
||||
text: 'Support',
|
||||
materialIcon: 'call_quality',
|
||||
uniqueIdentifier: 'call_support',
|
||||
click: function () { return _this.showSupport(); },
|
||||
},
|
||||
],
|
||||
},
|
||||
left: [
|
||||
{
|
||||
type: 'image',
|
||||
url: '/img/morphix_logo_white.png',
|
||||
type: 'normal',
|
||||
text: 'Restart',
|
||||
materialIcon: 'restart_alt',
|
||||
uniqueIdentifier: 'restart_installation',
|
||||
click: function () { return __awaiter$4(_this, void 0, void 0, function () {
|
||||
var mobileMenu;
|
||||
return __generator$4(this, function (_a) {
|
||||
mobileMenu = document.querySelector('.mux_mobilemenu');
|
||||
mobileMenu === null || mobileMenu === void 0 ? void 0 : mobileMenu.click();
|
||||
this.restartInstallation();
|
||||
return [2 /*return*/];
|
||||
});
|
||||
}); },
|
||||
},
|
||||
{
|
||||
type: 'normal',
|
||||
@@ -14446,7 +14511,16 @@
|
||||
],
|
||||
right: [
|
||||
{
|
||||
type: 'normal',
|
||||
type: 'icon',
|
||||
text: 'Support',
|
||||
materialIcon: 'call_quality',
|
||||
uniqueIdentifier: 'call_support',
|
||||
click: function () { return _this.showSupport(); },
|
||||
},
|
||||
{
|
||||
type: document.body.classList.contains('ntsh_service')
|
||||
? 'normal'
|
||||
: 'icon',
|
||||
text: document.body.classList.contains('ntsh_service')
|
||||
? 'Exit Service'
|
||||
: 'Service Mode',
|
||||
@@ -14469,6 +14543,55 @@
|
||||
this.container.innerHTML = '';
|
||||
this.container.appendChild(this.menubar.container);
|
||||
};
|
||||
MenuBar.prototype.showSupport = function () {
|
||||
return __awaiter$4(this, void 0, void 0, function () {
|
||||
var dialog, callAnchor;
|
||||
return __generator$4(this, function (_a) {
|
||||
dialog = new morphux_1$5.MorphComponent.Dialog({
|
||||
title: 'Contact Support',
|
||||
width: 'medium',
|
||||
height: 'auto',
|
||||
okButtonVisible: false,
|
||||
cancelButtonVisible: false,
|
||||
});
|
||||
this.supportNumber.slice();
|
||||
callAnchor = (0, morphux_1$5.ce)('a', 'ntsh_callanchor', { href: "tel:".concat(this.supportNumber) }, "+".concat(this.supportNumber));
|
||||
dialog.content.appendChild(callAnchor);
|
||||
setTimeout(function () { return callAnchor.click(); }, 100);
|
||||
return [2 /*return*/];
|
||||
});
|
||||
});
|
||||
};
|
||||
MenuBar.prototype.restartInstallation = function () {
|
||||
return __awaiter$4(this, void 0, void 0, function () {
|
||||
var confirmed;
|
||||
return __generator$4(this, function (_a) {
|
||||
switch (_a.label) {
|
||||
case 0: return [4 /*yield*/, morphux_1$5.MorphFeature.Confirm({
|
||||
title: 'Restart Installation',
|
||||
message: 'Are you sure you want to restart the installation?',
|
||||
})];
|
||||
case 1:
|
||||
confirmed = _a.sent();
|
||||
if (!confirmed)
|
||||
return [2 /*return*/];
|
||||
morphux_1$5.MorphFeature.Loader({
|
||||
active: true,
|
||||
message: 'Restarting installation...',
|
||||
});
|
||||
this._Main.socket.emit('restartInstallation', function (response) {
|
||||
morphux_1$5.MorphFeature.Loader({ active: false });
|
||||
if (!response.succeed)
|
||||
return morphux_1$5.MorphFeature.Alert({
|
||||
title: 'Error',
|
||||
message: response.message,
|
||||
});
|
||||
});
|
||||
return [2 /*return*/];
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
MenuBar.prototype.toggleServiceMode = function (mode, skipPin) {
|
||||
return __awaiter$4(this, void 0, void 0, function () {
|
||||
var newMode, servicePin;
|
||||
@@ -14671,18 +14794,19 @@
|
||||
statusElement.classList.add("ntsh_status-".concat(state));
|
||||
};
|
||||
exports.setStatusState = setStatusState;
|
||||
var setProgressState = function (progressElement, percentage) {
|
||||
var value = progressElement.querySelector('.ntsh_progress-value');
|
||||
value.style.width = "".concat(percentage * 100, "%");
|
||||
var setProgressState = function (progressElement, value, min, max, unit) {
|
||||
var percentage = (value - min) / (max - min);
|
||||
var progressValue = progressElement.querySelector('.ntsh_progress-value');
|
||||
progressValue.style.width = "".concat(percentage * 100, "%");
|
||||
var label = progressElement.querySelector('.ntsh_progress-label');
|
||||
label.innerText = "".concat(Math.round(percentage * 100), "%");
|
||||
label.innerText = "".concat(value).concat(unit);
|
||||
};
|
||||
exports.setProgressState = setProgressState;
|
||||
var createProgress = function (value) {
|
||||
var createProgress = function (value, min, max, unit) {
|
||||
var progress = (0, morphux_1.ce)('div', 'ntsh_progress');
|
||||
progress.appendChild((0, morphux_1.ce)('div', 'ntsh_progress-value'));
|
||||
progress.appendChild((0, morphux_1.ce)('div', 'ntsh_progress-label'));
|
||||
(0, exports.setProgressState)(progress, value);
|
||||
(0, exports.setProgressState)(progress, value, min, max, unit);
|
||||
return progress;
|
||||
};
|
||||
exports.createProgress = createProgress;
|
||||
@@ -15520,6 +15644,10 @@
|
||||
this.uptimeInfo = document.querySelector('.ntsh_dashboard-unity-uptime');
|
||||
this.webSocketStatus = document.querySelector('.ntsh_dashboard-unity-websocketstatus');
|
||||
this.webSocketInfo = document.querySelector('.ntsh_dashboard-unity-websocketinfo');
|
||||
this.outOfServiceStatus = document.querySelector('.ntsh_dashboard-unity-outofservicestatus');
|
||||
this.outOfServiceInfo = document.querySelector('.ntsh_dashboard-unity-outofserviceinfo');
|
||||
this.enableOutOfServiceButton = document.querySelector('.ntsh_dashboard-unity-enableoutofservice');
|
||||
this.disableOutOfServiceButton = document.querySelector('.ntsh_dashboard-unity-disableoutofservice');
|
||||
this.zedStreamStatus = document.querySelector('.ntsh_dashboard-unity-zedstreamstatus');
|
||||
this.zedStreamInfo = document.querySelector('.ntsh_dashboard-unity-zedstreaminfo');
|
||||
this.zedStreamFps = document.querySelector('.ntsh_dashboard-unity-zedstreamfps');
|
||||
@@ -15528,6 +15656,7 @@
|
||||
this.timelineStanding = document.querySelector('.ntsh_dashboard-unity-timeline-standing');
|
||||
this.timelineProgress = document.querySelector('.ntsh_dashboard-unity-timeline-progress');
|
||||
this.parametersTable = document.querySelector('.ntsh_dashboard-unity-parameters');
|
||||
this.sensorsTable = document.querySelector('.ntsh_dashboard-unity-sensors');
|
||||
this.errorContainer = document.querySelector('.ntsh_dashboard-unity-error');
|
||||
this.errorText = document.querySelector('.ntsh_dashboard-unity-errortext');
|
||||
this._Main = Main;
|
||||
@@ -15545,7 +15674,7 @@
|
||||
}
|
||||
(0, utils_1.setStatusState)(this.processStatus, {
|
||||
RUNNING: 'green',
|
||||
STOPPED: 'red',
|
||||
STOPPED: 'gray',
|
||||
STARTING: 'yellow',
|
||||
PROBLEM: 'red',
|
||||
}[state.state]);
|
||||
@@ -15571,6 +15700,28 @@
|
||||
FAILED: 'red',
|
||||
}[state.state]);
|
||||
this.webSocketInfo.innerText = (_a = state.message) !== null && _a !== void 0 ? _a : '';
|
||||
// ----------- Out of Service -----------
|
||||
(0, utils_1.setStatusState)(this.outOfServiceStatus, state.parameters.outOfService == null
|
||||
? 'gray'
|
||||
: state.parameters.outOfService
|
||||
? 'red'
|
||||
: 'green');
|
||||
this.outOfServiceInfo.innerText =
|
||||
state.parameters.outOfService == null
|
||||
? ''
|
||||
: state.parameters.outOfService
|
||||
? 'Out of Service'
|
||||
: 'Operational';
|
||||
this.enableOutOfServiceButton.style.display =
|
||||
state.parameters.outOfService == null ||
|
||||
state.parameters.outOfService
|
||||
? 'none'
|
||||
: 'flex';
|
||||
this.disableOutOfServiceButton.style.display =
|
||||
state.parameters.outOfService &&
|
||||
state.parameters.outOfService != null
|
||||
? 'flex'
|
||||
: 'none';
|
||||
// ----------- ZED Stream -----------
|
||||
(0, utils_1.setStatusState)(this.zedStreamStatus, state.parameters.zedReady ? 'green' : 'red');
|
||||
this.zedStreamInfo.innerText = state.parameters.zedReady
|
||||
@@ -15585,9 +15736,10 @@
|
||||
this.timelineStanding.innerText = state.parameters.timelineStanding
|
||||
? 'Yes'
|
||||
: 'No';
|
||||
(0, utils_1.setProgressState)(this.timelineProgress, state.parameters.timelineProgress);
|
||||
(0, utils_1.setProgressState)(this.timelineProgress, Math.round(state.parameters.timelineProgress * 100), 0, 100, '%');
|
||||
// ----------- Parameters -----------
|
||||
this.renderParameterSliders(state.parameters.parameters);
|
||||
this.renderParameterSliders(state.state == 'CONNECTED' ? state.parameters.sliders : []);
|
||||
this.renderParameterSensors(state.state == 'CONNECTED' ? state.parameters.sensors : []);
|
||||
// ----------- Error -----------
|
||||
if (((_b = state === null || state === void 0 ? void 0 : state.error) !== null && _b !== void 0 ? _b : '').trim().length > 0)
|
||||
this.webSocketError = state.error;
|
||||
@@ -15595,55 +15747,107 @@
|
||||
this.webSocketError = null;
|
||||
this.updateError();
|
||||
};
|
||||
DashboardUnity.prototype.renderParameterSliders = function (parameters) {
|
||||
DashboardUnity.prototype.renderParameterSliders = function (sliders) {
|
||||
var _this = this;
|
||||
if (parameters.length === 0)
|
||||
return;
|
||||
var existingSliders = this.parametersTable.querySelectorAll('.ntsh_dashboard-unity-parameter-row');
|
||||
if (existingSliders.length !== parameters.length) {
|
||||
if (existingSliders.length !== sliders.length) {
|
||||
this.parametersTable.innerHTML = '';
|
||||
parameters.forEach(function (param) {
|
||||
var row = (0, morphux_1$1.ce)('tr', 'ntsh_dashboard-unity-parameter-row');
|
||||
var nameCell = (0, morphux_1$1.ce)('td');
|
||||
nameCell.appendChild((0, morphux_1$1.ce)('div', 'mux_text', null, param.sliderName));
|
||||
row.appendChild(nameCell);
|
||||
var progressCell = (0, morphux_1$1.ce)('td', 'no-service');
|
||||
progressCell.appendChild((0, utils_1.createProgress)(param.outputValue));
|
||||
row.appendChild(progressCell);
|
||||
var sliderCell = (0, morphux_1$1.ce)('td', 'only-service');
|
||||
var sliderProgress = (0, utils_1.createProgress)(param.outputValue);
|
||||
var sliderValue = sliderProgress.querySelector('.ntsh_progress-value');
|
||||
sliderValue.classList.add('mux_resizer');
|
||||
sliderCell.appendChild(sliderProgress);
|
||||
var resizer = new morphux_1$1.MorphComponent.Resizer({
|
||||
existingContainer: sliderValue,
|
||||
direction: 'right',
|
||||
relative: true,
|
||||
min: 0,
|
||||
max: function () { return sliderProgress.clientWidth; },
|
||||
if (sliders.length === 0) {
|
||||
var row = (0, morphux_1$1.ce)('tr');
|
||||
var cell = (0, morphux_1$1.ce)('td');
|
||||
cell.appendChild((0, morphux_1$1.ce)('div', ['mux_text', 'ntsh_dashboard-unity-parameters-loading'], null, 'Waiting for Unity...'));
|
||||
row.appendChild(cell);
|
||||
this.parametersTable.appendChild(row);
|
||||
}
|
||||
else
|
||||
sliders.forEach(function (slider) {
|
||||
var _a, _b;
|
||||
var multiplierFactor = (_a = slider.visualMultiplier) !== null && _a !== void 0 ? _a : 1;
|
||||
var decimalPlacesFactor = Math.pow(10, ((_b = slider.decimalPlaces) !== null && _b !== void 0 ? _b : 0));
|
||||
var value = Math.round(slider.outputValue *
|
||||
multiplierFactor *
|
||||
decimalPlacesFactor) / decimalPlacesFactor;
|
||||
var row = (0, morphux_1$1.ce)('tr', 'ntsh_dashboard-unity-parameter-row');
|
||||
var nameCell = (0, morphux_1$1.ce)('td');
|
||||
nameCell.appendChild((0, morphux_1$1.ce)('div', 'mux_text', null, slider.sliderName));
|
||||
row.appendChild(nameCell);
|
||||
var progressCell = (0, morphux_1$1.ce)('td', 'no-service');
|
||||
progressCell.appendChild((0, utils_1.createProgress)(value, slider.min * multiplierFactor, slider.max * multiplierFactor, slider.unit));
|
||||
row.appendChild(progressCell);
|
||||
var sliderCell = (0, morphux_1$1.ce)('td', 'only-service');
|
||||
var sliderProgress = (0, utils_1.createProgress)(value, slider.min * multiplierFactor, slider.max * multiplierFactor, slider.unit);
|
||||
var sliderValue = sliderProgress.querySelector('.ntsh_progress-value');
|
||||
sliderValue.classList.add('mux_resizer');
|
||||
sliderCell.appendChild(sliderProgress);
|
||||
var resizer = new morphux_1$1.MorphComponent.Resizer({
|
||||
existingContainer: sliderValue,
|
||||
direction: 'right',
|
||||
relative: true,
|
||||
min: 0,
|
||||
max: function () { return sliderProgress.clientWidth; },
|
||||
});
|
||||
var lastValue = -1;
|
||||
resizer.on('resized', function (size) {
|
||||
var percentage = Math.round((size / sliderProgress.clientWidth) * 100) / 100;
|
||||
var actualValue = slider.min + percentage * (slider.max - slider.min);
|
||||
if (actualValue === lastValue)
|
||||
return;
|
||||
lastValue = actualValue;
|
||||
_this._Main.socket.emit('unityWebSocket', 'parameterValue', slider.sliderIndex, actualValue);
|
||||
(0, utils_1.setProgressState)(sliderProgress, Math.round(actualValue *
|
||||
multiplierFactor *
|
||||
decimalPlacesFactor) / decimalPlacesFactor, slider.min * multiplierFactor, slider.max * multiplierFactor, slider.unit);
|
||||
});
|
||||
row.appendChild(sliderCell);
|
||||
_this.parametersTable.appendChild(row);
|
||||
});
|
||||
var lastPercentage = -1;
|
||||
resizer.on('resized', function (size) {
|
||||
var percentage = Math.round((size / sliderProgress.clientWidth) * 100) /
|
||||
100;
|
||||
if (percentage === lastPercentage)
|
||||
return;
|
||||
lastPercentage = percentage;
|
||||
_this._Main.socket.emit('unityWebSocket', 'parameterValue', param.sliderIndex, percentage);
|
||||
(0, utils_1.setProgressState)(sliderProgress, percentage);
|
||||
});
|
||||
row.appendChild(sliderCell);
|
||||
_this.parametersTable.appendChild(row);
|
||||
});
|
||||
}
|
||||
else {
|
||||
existingSliders.forEach(function (row, index) {
|
||||
var value = parameters[index].outputValue;
|
||||
var _a, _b;
|
||||
var slider = sliders[index];
|
||||
var multiplierFactor = (_a = slider.visualMultiplier) !== null && _a !== void 0 ? _a : 1;
|
||||
var decimalPlacesFactor = Math.pow(10, ((_b = slider.decimalPlaces) !== null && _b !== void 0 ? _b : 0));
|
||||
var value = Math.round(slider.outputValue *
|
||||
multiplierFactor *
|
||||
decimalPlacesFactor) / decimalPlacesFactor;
|
||||
var progressElement = row.querySelector('.no-service .ntsh_progress');
|
||||
(0, utils_1.setProgressState)(progressElement, value);
|
||||
(0, utils_1.setProgressState)(progressElement, value, slider.min * multiplierFactor, slider.max * multiplierFactor, slider.unit);
|
||||
var sliderElement = row.querySelector('.only-service .ntsh_progress');
|
||||
if (sliderElement.querySelector('.mux_resizer-moving') == null)
|
||||
(0, utils_1.setProgressState)(sliderElement, value);
|
||||
(0, utils_1.setProgressState)(sliderElement, value, slider.min * multiplierFactor, slider.max * multiplierFactor, slider.unit);
|
||||
});
|
||||
}
|
||||
};
|
||||
DashboardUnity.prototype.renderParameterSensors = function (sensors) {
|
||||
var _this = this;
|
||||
var existingSensors = this.sensorsTable.querySelectorAll('.ntsh_dashboard-unity-sensor-row');
|
||||
if (existingSensors.length !== sensors.length) {
|
||||
this.sensorsTable.innerHTML = '';
|
||||
if (sensors.length === 0) {
|
||||
var row = (0, morphux_1$1.ce)('tr');
|
||||
var cell = (0, morphux_1$1.ce)('td');
|
||||
cell.appendChild((0, morphux_1$1.ce)('div', ['mux_text', 'ntsh_dashboard-unity-sensors-loading'], null, 'Waiting for Unity...'));
|
||||
row.appendChild(cell);
|
||||
this.sensorsTable.appendChild(row);
|
||||
}
|
||||
else
|
||||
sensors.forEach(function (sensor) {
|
||||
var row = (0, morphux_1$1.ce)('tr', 'ntsh_dashboard-unity-sensor-row');
|
||||
var nameCell = (0, morphux_1$1.ce)('td');
|
||||
nameCell.appendChild((0, morphux_1$1.ce)('div', 'mux_text', null, sensor.deviceName));
|
||||
row.appendChild(nameCell);
|
||||
var progressCell = (0, morphux_1$1.ce)('td');
|
||||
progressCell.appendChild((0, utils_1.createProgress)(Math.round(sensor.outputValue * 100), 0, 100, '%'));
|
||||
row.appendChild(progressCell);
|
||||
_this.sensorsTable.appendChild(row);
|
||||
});
|
||||
}
|
||||
else {
|
||||
existingSensors.forEach(function (row, index) {
|
||||
var value = sensors[index].outputValue;
|
||||
var progressElement = row.querySelector('.ntsh_progress');
|
||||
(0, utils_1.setProgressState)(progressElement, Math.round(value * 100), 0, 100, '%');
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -15674,10 +15878,23 @@
|
||||
return [2 /*return*/];
|
||||
});
|
||||
}); });
|
||||
this.enableOutOfServiceButton.addEventListener('click', function () { return __awaiter(_this, void 0, void 0, function () {
|
||||
return __generator(this, function (_a) {
|
||||
this.executeCommand('enableOutOfService', 'Are you sure you want to set the installation to "Out of Service"?', 'unityWebSocket');
|
||||
return [2 /*return*/];
|
||||
});
|
||||
}); });
|
||||
this.disableOutOfServiceButton.addEventListener('click', function () { return __awaiter(_this, void 0, void 0, function () {
|
||||
return __generator(this, function (_a) {
|
||||
this.executeCommand('disableOutOfService', 'Are you sure you want to set the installation to "Operational"?', 'unityWebSocket');
|
||||
return [2 /*return*/];
|
||||
});
|
||||
}); });
|
||||
};
|
||||
DashboardUnity.prototype.executeCommand = function (command, message) {
|
||||
return __awaiter(this, void 0, void 0, function () {
|
||||
DashboardUnity.prototype.executeCommand = function (command_1, message_1) {
|
||||
return __awaiter(this, arguments, void 0, function (command, message, type) {
|
||||
var confirmed;
|
||||
if (type === void 0) { type = 'unityRunner'; }
|
||||
return __generator(this, function (_a) {
|
||||
switch (_a.label) {
|
||||
case 0: return [4 /*yield*/, morphux_1$1.MorphFeature.Confirm({
|
||||
@@ -15690,9 +15907,9 @@
|
||||
return [2 /*return*/];
|
||||
morphux_1$1.MorphFeature.Loader({
|
||||
active: true,
|
||||
message: "Requesting Unity Runner ".concat(command, "..."),
|
||||
message: "Dispatching command...",
|
||||
});
|
||||
this._Main.socket.emit('unityRunner', command, function (response) {
|
||||
this._Main.socket.emit(type, command, function (response) {
|
||||
morphux_1$1.MorphFeature.Loader({ active: false });
|
||||
if (!response.succeed)
|
||||
return morphux_1$1.MorphFeature.Alert({
|
||||
@@ -15701,7 +15918,7 @@
|
||||
});
|
||||
morphux_1$1.MorphFeature.Notification({
|
||||
level: 'success',
|
||||
message: "Unity Runner is ".concat(command, "ing..."),
|
||||
message: "Dispatched command",
|
||||
});
|
||||
});
|
||||
return [2 /*return*/];
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -38,6 +38,13 @@
|
||||
}
|
||||
}
|
||||
|
||||
.ntsh_dashboard-unity-sensors {
|
||||
.ntsh_dashboard-unity-sensors-loading {
|
||||
text-align: center;
|
||||
color: #9d9d9d;
|
||||
}
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
|
||||
@@ -176,3 +183,17 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ntsh_callanchor {
|
||||
width: 100%;
|
||||
background: #202020;
|
||||
margin-bottom: calc(var(--mux-edge-offset) * -1);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 30px;
|
||||
padding: var(--mux-edge-offset) 0px;
|
||||
color: #fff;
|
||||
font-family: monospace;
|
||||
letter-spacing: 0px;
|
||||
}
|
||||
@@ -17,7 +17,7 @@ body {
|
||||
}
|
||||
|
||||
.mux_menubar-locater.mux_left {
|
||||
.mux_menubar-item {
|
||||
.mux_menubar-item:not([uid="restart_installation"]) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@@ -32,6 +32,7 @@ body {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.sn {
|
||||
|
||||
@@ -2400,6 +2400,10 @@ body {
|
||||
text-align: center;
|
||||
color: #9d9d9d;
|
||||
}
|
||||
.ntsh_dashboard .ntsh_dashboard-unity-sensors .ntsh_dashboard-unity-sensors-loading {
|
||||
text-align: center;
|
||||
color: #9d9d9d;
|
||||
}
|
||||
.ntsh_dashboard table {
|
||||
width: 100%;
|
||||
}
|
||||
@@ -2506,6 +2510,20 @@ body {
|
||||
background: #5a5a5a;
|
||||
}
|
||||
|
||||
.ntsh_callanchor {
|
||||
width: 100%;
|
||||
background: #202020;
|
||||
margin-bottom: calc(var(--mux-edge-offset) * -1);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 30px;
|
||||
padding: var(--mux-edge-offset) 0px;
|
||||
color: #fff;
|
||||
font-family: monospace;
|
||||
letter-spacing: 0px;
|
||||
}
|
||||
|
||||
.ntsh_tabs {
|
||||
position: absolute;
|
||||
inset: 50px 0 0 0;
|
||||
@@ -2555,7 +2573,7 @@ body {
|
||||
body:not(.ntsh_service) .ntsh_buttons {
|
||||
display: none;
|
||||
}
|
||||
body:not(.ntsh_service) .mux_menubar-locater.mux_left .mux_menubar-item {
|
||||
body:not(.ntsh_service) .mux_menubar-locater.mux_left .mux_menubar-item:not([uid=restart_installation]) {
|
||||
display: none;
|
||||
}
|
||||
body:not(.ntsh_service) .only-service {
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -35,6 +35,19 @@ export class DashboardUnity {
|
||||
'.ntsh_dashboard-unity-websocketinfo'
|
||||
);
|
||||
|
||||
outOfServiceStatus: HTMLDivElement = document.querySelector(
|
||||
'.ntsh_dashboard-unity-outofservicestatus'
|
||||
);
|
||||
outOfServiceInfo: HTMLDivElement = document.querySelector(
|
||||
'.ntsh_dashboard-unity-outofserviceinfo'
|
||||
);
|
||||
enableOutOfServiceButton: HTMLDivElement = document.querySelector(
|
||||
'.ntsh_dashboard-unity-enableoutofservice'
|
||||
);
|
||||
disableOutOfServiceButton: HTMLDivElement = document.querySelector(
|
||||
'.ntsh_dashboard-unity-disableoutofservice'
|
||||
);
|
||||
|
||||
zedStreamStatus: HTMLDivElement = document.querySelector(
|
||||
'.ntsh_dashboard-unity-zedstreamstatus'
|
||||
);
|
||||
@@ -63,6 +76,10 @@ export class DashboardUnity {
|
||||
'.ntsh_dashboard-unity-parameters'
|
||||
);
|
||||
|
||||
sensorsTable: HTMLTableElement = document.querySelector(
|
||||
'.ntsh_dashboard-unity-sensors'
|
||||
);
|
||||
|
||||
errorContainer: HTMLDivElement = document.querySelector(
|
||||
'.ntsh_dashboard-unity-error'
|
||||
);
|
||||
@@ -91,7 +108,7 @@ export class DashboardUnity {
|
||||
this.processStatus,
|
||||
{
|
||||
RUNNING: 'green',
|
||||
STOPPED: 'red',
|
||||
STOPPED: 'gray',
|
||||
STARTING: 'yellow',
|
||||
PROBLEM: 'red',
|
||||
}[state.state] as StatusType
|
||||
@@ -126,6 +143,33 @@ export class DashboardUnity {
|
||||
);
|
||||
this.webSocketInfo.innerText = state.message ?? '';
|
||||
|
||||
// ----------- Out of Service -----------
|
||||
setStatusState(
|
||||
this.outOfServiceStatus,
|
||||
state.parameters.outOfService == null
|
||||
? 'gray'
|
||||
: state.parameters.outOfService
|
||||
? 'red'
|
||||
: 'green'
|
||||
);
|
||||
this.outOfServiceInfo.innerText =
|
||||
state.parameters.outOfService == null
|
||||
? ''
|
||||
: state.parameters.outOfService
|
||||
? 'Out of Service'
|
||||
: 'Operational';
|
||||
|
||||
this.enableOutOfServiceButton.style.display =
|
||||
state.parameters.outOfService == null ||
|
||||
state.parameters.outOfService
|
||||
? 'none'
|
||||
: 'flex';
|
||||
this.disableOutOfServiceButton.style.display =
|
||||
state.parameters.outOfService &&
|
||||
state.parameters.outOfService != null
|
||||
? 'flex'
|
||||
: 'none';
|
||||
|
||||
// ----------- ZED Stream -----------
|
||||
setStatusState(
|
||||
this.zedStreamStatus,
|
||||
@@ -146,11 +190,19 @@ export class DashboardUnity {
|
||||
: 'No';
|
||||
setProgressState(
|
||||
this.timelineProgress,
|
||||
state.parameters.timelineProgress
|
||||
Math.round(state.parameters.timelineProgress * 100),
|
||||
0,
|
||||
100,
|
||||
'%'
|
||||
);
|
||||
|
||||
// ----------- Parameters -----------
|
||||
this.renderParameterSliders(state.parameters.parameters);
|
||||
this.renderParameterSliders(
|
||||
state.state == 'CONNECTED' ? state.parameters.sliders : []
|
||||
);
|
||||
this.renderParameterSensors(
|
||||
state.state == 'CONNECTED' ? state.parameters.sensors : []
|
||||
);
|
||||
|
||||
// ----------- Error -----------
|
||||
if ((state?.error ?? '').trim().length > 0)
|
||||
@@ -159,78 +211,210 @@ export class DashboardUnity {
|
||||
this.updateError();
|
||||
}
|
||||
|
||||
private renderParameterSliders(parameters: UnityParameters['parameters']) {
|
||||
if (parameters.length === 0) return;
|
||||
|
||||
private renderParameterSliders(sliders: UnityParameters['sliders']) {
|
||||
const existingSliders = this.parametersTable.querySelectorAll(
|
||||
'.ntsh_dashboard-unity-parameter-row'
|
||||
);
|
||||
|
||||
if (existingSliders.length !== parameters.length) {
|
||||
if (existingSliders.length !== sliders.length) {
|
||||
this.parametersTable.innerHTML = '';
|
||||
|
||||
parameters.forEach((param) => {
|
||||
const row = ce('tr', 'ntsh_dashboard-unity-parameter-row');
|
||||
|
||||
const nameCell = ce('td');
|
||||
nameCell.appendChild(
|
||||
ce('div', 'mux_text', null, param.sliderName)
|
||||
if (sliders.length === 0) {
|
||||
const row = ce('tr');
|
||||
const cell = ce('td');
|
||||
cell.appendChild(
|
||||
ce(
|
||||
'div',
|
||||
['mux_text', 'ntsh_dashboard-unity-parameters-loading'],
|
||||
null,
|
||||
'Waiting for Unity...'
|
||||
)
|
||||
);
|
||||
row.appendChild(nameCell);
|
||||
|
||||
const progressCell = ce('td', 'no-service');
|
||||
progressCell.appendChild(createProgress(param.outputValue));
|
||||
row.appendChild(progressCell);
|
||||
|
||||
const sliderCell = ce('td', 'only-service');
|
||||
const sliderProgress = createProgress(param.outputValue);
|
||||
const sliderValue: HTMLDivElement =
|
||||
sliderProgress.querySelector('.ntsh_progress-value');
|
||||
sliderValue.classList.add('mux_resizer');
|
||||
sliderCell.appendChild(sliderProgress);
|
||||
|
||||
const resizer = new MorphComponent.Resizer({
|
||||
existingContainer: sliderValue,
|
||||
direction: 'right',
|
||||
relative: true,
|
||||
min: 0,
|
||||
max: () => sliderProgress.clientWidth,
|
||||
});
|
||||
let lastPercentage: number = -1;
|
||||
resizer.on('resized', (size) => {
|
||||
const percentage =
|
||||
Math.round((size / sliderProgress.clientWidth) * 100) /
|
||||
100;
|
||||
if (percentage === lastPercentage) return;
|
||||
lastPercentage = percentage;
|
||||
|
||||
this._Main.socket.emit(
|
||||
'unityWebSocket',
|
||||
'parameterValue',
|
||||
param.sliderIndex,
|
||||
percentage
|
||||
);
|
||||
setProgressState(sliderProgress, percentage);
|
||||
});
|
||||
|
||||
row.appendChild(sliderCell);
|
||||
|
||||
row.appendChild(cell);
|
||||
this.parametersTable.appendChild(row);
|
||||
});
|
||||
} else
|
||||
sliders.forEach((slider) => {
|
||||
const multiplierFactor = slider.visualMultiplier ?? 1;
|
||||
const decimalPlacesFactor =
|
||||
10 ** (slider.decimalPlaces ?? 0);
|
||||
|
||||
const value =
|
||||
Math.round(
|
||||
slider.outputValue *
|
||||
multiplierFactor *
|
||||
decimalPlacesFactor
|
||||
) / decimalPlacesFactor;
|
||||
|
||||
const row = ce('tr', 'ntsh_dashboard-unity-parameter-row');
|
||||
|
||||
const nameCell = ce('td');
|
||||
nameCell.appendChild(
|
||||
ce('div', 'mux_text', null, slider.sliderName)
|
||||
);
|
||||
row.appendChild(nameCell);
|
||||
|
||||
const progressCell = ce('td', 'no-service');
|
||||
progressCell.appendChild(
|
||||
createProgress(
|
||||
value,
|
||||
slider.min * multiplierFactor,
|
||||
slider.max * multiplierFactor,
|
||||
slider.unit
|
||||
)
|
||||
);
|
||||
row.appendChild(progressCell);
|
||||
|
||||
const sliderCell = ce('td', 'only-service');
|
||||
const sliderProgress = createProgress(
|
||||
value,
|
||||
slider.min * multiplierFactor,
|
||||
slider.max * multiplierFactor,
|
||||
slider.unit
|
||||
);
|
||||
const sliderValue: HTMLDivElement =
|
||||
sliderProgress.querySelector('.ntsh_progress-value');
|
||||
sliderValue.classList.add('mux_resizer');
|
||||
sliderCell.appendChild(sliderProgress);
|
||||
|
||||
const resizer = new MorphComponent.Resizer({
|
||||
existingContainer: sliderValue,
|
||||
direction: 'right',
|
||||
relative: true,
|
||||
min: 0,
|
||||
max: () => sliderProgress.clientWidth,
|
||||
});
|
||||
let lastValue: number = -1;
|
||||
resizer.on('resized', (size) => {
|
||||
const percentage =
|
||||
Math.round(
|
||||
(size / sliderProgress.clientWidth) * 100
|
||||
) / 100;
|
||||
|
||||
var actualValue =
|
||||
slider.min + percentage * (slider.max - slider.min);
|
||||
|
||||
if (actualValue === lastValue) return;
|
||||
lastValue = actualValue;
|
||||
|
||||
this._Main.socket.emit(
|
||||
'unityWebSocket',
|
||||
'parameterValue',
|
||||
slider.sliderIndex,
|
||||
actualValue
|
||||
);
|
||||
setProgressState(
|
||||
sliderProgress,
|
||||
Math.round(
|
||||
actualValue *
|
||||
multiplierFactor *
|
||||
decimalPlacesFactor
|
||||
) / decimalPlacesFactor,
|
||||
slider.min * multiplierFactor,
|
||||
slider.max * multiplierFactor,
|
||||
slider.unit
|
||||
);
|
||||
});
|
||||
|
||||
row.appendChild(sliderCell);
|
||||
|
||||
this.parametersTable.appendChild(row);
|
||||
});
|
||||
} else {
|
||||
existingSliders.forEach((row, index) => {
|
||||
const value = parameters[index].outputValue;
|
||||
const slider = sliders[index];
|
||||
const multiplierFactor = slider.visualMultiplier ?? 1;
|
||||
const decimalPlacesFactor = 10 ** (slider.decimalPlaces ?? 0);
|
||||
|
||||
const value =
|
||||
Math.round(
|
||||
slider.outputValue *
|
||||
multiplierFactor *
|
||||
decimalPlacesFactor
|
||||
) / decimalPlacesFactor;
|
||||
|
||||
const progressElement: HTMLDivElement = row.querySelector(
|
||||
'.no-service .ntsh_progress'
|
||||
);
|
||||
setProgressState(progressElement, value);
|
||||
setProgressState(
|
||||
progressElement,
|
||||
value,
|
||||
slider.min * multiplierFactor,
|
||||
slider.max * multiplierFactor,
|
||||
slider.unit
|
||||
);
|
||||
|
||||
const sliderElement: HTMLDivElement = row.querySelector(
|
||||
'.only-service .ntsh_progress'
|
||||
);
|
||||
if (sliderElement.querySelector('.mux_resizer-moving') == null)
|
||||
setProgressState(sliderElement, value);
|
||||
setProgressState(
|
||||
sliderElement,
|
||||
value,
|
||||
slider.min * multiplierFactor,
|
||||
slider.max * multiplierFactor,
|
||||
slider.unit
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private renderParameterSensors(sensors: UnityParameters['sensors']) {
|
||||
const existingSensors = this.sensorsTable.querySelectorAll(
|
||||
'.ntsh_dashboard-unity-sensor-row'
|
||||
);
|
||||
|
||||
if (existingSensors.length !== sensors.length) {
|
||||
this.sensorsTable.innerHTML = '';
|
||||
|
||||
if (sensors.length === 0) {
|
||||
const row = ce('tr');
|
||||
const cell = ce('td');
|
||||
cell.appendChild(
|
||||
ce(
|
||||
'div',
|
||||
['mux_text', 'ntsh_dashboard-unity-sensors-loading'],
|
||||
null,
|
||||
'Waiting for Unity...'
|
||||
)
|
||||
);
|
||||
row.appendChild(cell);
|
||||
this.sensorsTable.appendChild(row);
|
||||
} else
|
||||
sensors.forEach((sensor) => {
|
||||
const row = ce('tr', 'ntsh_dashboard-unity-sensor-row');
|
||||
|
||||
const nameCell = ce('td');
|
||||
nameCell.appendChild(
|
||||
ce('div', 'mux_text', null, sensor.deviceName)
|
||||
);
|
||||
row.appendChild(nameCell);
|
||||
|
||||
const progressCell = ce('td');
|
||||
progressCell.appendChild(
|
||||
createProgress(
|
||||
Math.round(sensor.outputValue * 100),
|
||||
0,
|
||||
100,
|
||||
'%'
|
||||
)
|
||||
);
|
||||
row.appendChild(progressCell);
|
||||
|
||||
this.sensorsTable.appendChild(row);
|
||||
});
|
||||
} else {
|
||||
existingSensors.forEach((row, index) => {
|
||||
const value = sensors[index].outputValue;
|
||||
|
||||
const progressElement: HTMLDivElement =
|
||||
row.querySelector('.ntsh_progress');
|
||||
setProgressState(
|
||||
progressElement,
|
||||
Math.round(value * 100),
|
||||
0,
|
||||
100,
|
||||
'%'
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -264,9 +448,29 @@ export class DashboardUnity {
|
||||
'Are you sure you want to restart the Unity Runner process?'
|
||||
);
|
||||
});
|
||||
|
||||
this.enableOutOfServiceButton.addEventListener('click', async () => {
|
||||
this.executeCommand(
|
||||
'enableOutOfService',
|
||||
'Are you sure you want to set the installation to "Out of Service"?',
|
||||
'unityWebSocket'
|
||||
);
|
||||
});
|
||||
|
||||
this.disableOutOfServiceButton.addEventListener('click', async () => {
|
||||
this.executeCommand(
|
||||
'disableOutOfService',
|
||||
'Are you sure you want to set the installation to "Operational"?',
|
||||
'unityWebSocket'
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
private async executeCommand(command: string, message: string) {
|
||||
private async executeCommand(
|
||||
command: string,
|
||||
message: string,
|
||||
type: 'unityRunner' | 'unityWebSocket' = 'unityRunner'
|
||||
) {
|
||||
const confirmed = await MorphFeature.Confirm({
|
||||
title: 'Are you sure?',
|
||||
message,
|
||||
@@ -275,10 +479,10 @@ export class DashboardUnity {
|
||||
|
||||
MorphFeature.Loader({
|
||||
active: true,
|
||||
message: `Requesting Unity Runner ${command}...`,
|
||||
message: `Dispatching command...`,
|
||||
});
|
||||
this._Main.socket.emit(
|
||||
'unityRunner',
|
||||
type,
|
||||
command,
|
||||
(response: { succeed: boolean; message?: string }) => {
|
||||
MorphFeature.Loader({ active: false });
|
||||
@@ -291,7 +495,7 @@ export class DashboardUnity {
|
||||
|
||||
MorphFeature.Notification({
|
||||
level: 'success',
|
||||
message: `Unity Runner is ${command}ing...`,
|
||||
message: `Dispatched command`,
|
||||
});
|
||||
}
|
||||
);
|
||||
@@ -322,7 +526,16 @@ interface UnityParameters {
|
||||
zedPath: string;
|
||||
zedReady: boolean;
|
||||
zedFPS: string;
|
||||
parameters: UnitySocketMessageHeartbeat['heartbeat']['dataSliders'];
|
||||
outOfService: boolean;
|
||||
sliders: UnityParameterSlider[];
|
||||
sensors: UnitySocketMessageHeartbeat['heartbeat']['dataSensors'];
|
||||
}
|
||||
|
||||
type UnityHeartbeatSlider =
|
||||
UnitySocketMessageHeartbeat['heartbeat']['dataSliders'][number];
|
||||
interface UnityParameterSlider extends UnityHeartbeatSlider {
|
||||
visualMultiplier: number;
|
||||
decimalPlaces: number;
|
||||
}
|
||||
|
||||
interface UnitySocketMessageBase {
|
||||
@@ -332,10 +545,18 @@ interface UnitySocketMessageBase {
|
||||
interface UnitySocketMessageHeartbeat extends UnitySocketMessageBase {
|
||||
type: 'heartbeat_data';
|
||||
heartbeat: {
|
||||
dataSensors: {
|
||||
sensorIndex: number;
|
||||
deviceName: string;
|
||||
outputValue: number;
|
||||
}[];
|
||||
dataSliders: {
|
||||
sliderIndex: number;
|
||||
sliderName: string;
|
||||
outputValue: number;
|
||||
min: number;
|
||||
max: number;
|
||||
unit: string;
|
||||
}[];
|
||||
dataTimeline: {
|
||||
isStanding: boolean;
|
||||
@@ -349,5 +570,6 @@ interface UnitySocketMessageHeartbeat extends UnitySocketMessageBase {
|
||||
streamInputPort: number;
|
||||
zedGrabError: number;
|
||||
};
|
||||
showOutOfService?: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { MorphComponent, MorphFeature } from 'morphux';
|
||||
import { ce, MorphComponent, MorphFeature } from 'morphux';
|
||||
import { Main } from './main';
|
||||
import { ComponentMenuBar } from 'morphux/dist/Components/MenuBar/Component.MenuBar';
|
||||
|
||||
@@ -9,11 +9,17 @@ export class MenuBar {
|
||||
|
||||
menubar: ComponentMenuBar;
|
||||
|
||||
supportNumber: string;
|
||||
|
||||
constructor(main: Main) {
|
||||
this._Main = main;
|
||||
|
||||
this.build();
|
||||
|
||||
this._Main.socket.on('supportNumber', (number: string) => {
|
||||
this.supportNumber = number;
|
||||
});
|
||||
|
||||
setTimeout(() => {
|
||||
if (localStorage?.getItem('serviceMode') === 'true')
|
||||
this.toggleServiceMode(true, true);
|
||||
@@ -22,10 +28,47 @@ export class MenuBar {
|
||||
|
||||
build() {
|
||||
this.menubar = new ComponentMenuBar({
|
||||
mobile: {
|
||||
left: [
|
||||
{
|
||||
type: 'icon',
|
||||
text: 'Restart',
|
||||
materialIcon: 'restart_alt',
|
||||
uniqueIdentifier: 'restart_installation',
|
||||
|
||||
click: async () => {
|
||||
const mobileMenu: HTMLDivElement =
|
||||
document.querySelector('.mux_mobilemenu');
|
||||
mobileMenu?.click();
|
||||
|
||||
this.restartInstallation();
|
||||
},
|
||||
},
|
||||
],
|
||||
right: [
|
||||
{
|
||||
type: 'icon',
|
||||
text: 'Support',
|
||||
materialIcon: 'call_quality',
|
||||
uniqueIdentifier: 'call_support',
|
||||
click: () => this.showSupport(),
|
||||
},
|
||||
],
|
||||
},
|
||||
left: [
|
||||
{
|
||||
type: 'image',
|
||||
url: '/img/morphix_logo_white.png',
|
||||
type: 'normal',
|
||||
text: 'Restart',
|
||||
materialIcon: 'restart_alt',
|
||||
uniqueIdentifier: 'restart_installation',
|
||||
|
||||
click: async () => {
|
||||
const mobileMenu: HTMLDivElement =
|
||||
document.querySelector('.mux_mobilemenu');
|
||||
mobileMenu?.click();
|
||||
|
||||
this.restartInstallation();
|
||||
},
|
||||
},
|
||||
{
|
||||
type: 'normal',
|
||||
@@ -65,7 +108,16 @@ export class MenuBar {
|
||||
|
||||
right: [
|
||||
{
|
||||
type: 'normal',
|
||||
type: 'icon',
|
||||
text: 'Support',
|
||||
materialIcon: 'call_quality',
|
||||
uniqueIdentifier: 'call_support',
|
||||
click: () => this.showSupport(),
|
||||
},
|
||||
{
|
||||
type: document.body.classList.contains('ntsh_service')
|
||||
? 'normal'
|
||||
: 'icon',
|
||||
text: document.body.classList.contains('ntsh_service')
|
||||
? 'Exit Service'
|
||||
: 'Service Mode',
|
||||
@@ -90,6 +142,51 @@ export class MenuBar {
|
||||
this.container.appendChild(this.menubar.container);
|
||||
}
|
||||
|
||||
async showSupport() {
|
||||
const dialog = new MorphComponent.Dialog({
|
||||
title: 'Contact Support',
|
||||
width: 'medium',
|
||||
height: 'auto',
|
||||
okButtonVisible: false,
|
||||
cancelButtonVisible: false,
|
||||
});
|
||||
|
||||
this.supportNumber.slice();
|
||||
const callAnchor = ce(
|
||||
'a',
|
||||
'ntsh_callanchor',
|
||||
{ href: `tel:${this.supportNumber}` },
|
||||
`+${this.supportNumber}`
|
||||
);
|
||||
dialog.content.appendChild(callAnchor);
|
||||
|
||||
setTimeout(() => callAnchor.click(), 100);
|
||||
}
|
||||
|
||||
async restartInstallation() {
|
||||
const confirmed = await MorphFeature.Confirm({
|
||||
title: 'Restart Installation',
|
||||
message: 'Are you sure you want to restart the installation?',
|
||||
});
|
||||
if (!confirmed) return;
|
||||
|
||||
MorphFeature.Loader({
|
||||
active: true,
|
||||
message: 'Restarting installation...',
|
||||
});
|
||||
this._Main.socket.emit(
|
||||
'restartInstallation',
|
||||
(response: { succeed: boolean; message?: string }) => {
|
||||
MorphFeature.Loader({ active: false });
|
||||
if (!response.succeed)
|
||||
return MorphFeature.Alert({
|
||||
title: 'Error',
|
||||
message: response.message,
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
async toggleServiceMode(
|
||||
mode?: boolean,
|
||||
skipPin?: boolean
|
||||
|
||||
@@ -26,24 +26,34 @@ export type StatusType = 'green' | 'yellow' | 'red' | 'gray';
|
||||
|
||||
export const setProgressState = (
|
||||
progressElement: HTMLDivElement,
|
||||
percentage: number
|
||||
value: number,
|
||||
min: number,
|
||||
max: number,
|
||||
unit: string
|
||||
) => {
|
||||
const value: HTMLDivElement = progressElement.querySelector(
|
||||
const percentage = (value - min) / (max - min);
|
||||
|
||||
const progressValue: HTMLDivElement = progressElement.querySelector(
|
||||
'.ntsh_progress-value'
|
||||
);
|
||||
value.style.width = `${percentage * 100}%`;
|
||||
progressValue.style.width = `${percentage * 100}%`;
|
||||
|
||||
const label: HTMLDivElement = progressElement.querySelector(
|
||||
'.ntsh_progress-label'
|
||||
);
|
||||
label.innerText = `${Math.round(percentage * 100)}%`;
|
||||
label.innerText = `${value}${unit}`;
|
||||
};
|
||||
|
||||
export const createProgress = (value: number) => {
|
||||
export const createProgress = (
|
||||
value: number,
|
||||
min: number,
|
||||
max: number,
|
||||
unit: string
|
||||
) => {
|
||||
const progress = ce('div', 'ntsh_progress');
|
||||
progress.appendChild(ce('div', 'ntsh_progress-value'));
|
||||
progress.appendChild(ce('div', 'ntsh_progress-label'));
|
||||
setProgressState(progress, value);
|
||||
setProgressState(progress, value, min, max, unit);
|
||||
return progress;
|
||||
};
|
||||
export function capitalizeFirstLetter(string: string) {
|
||||
|
||||
@@ -39,7 +39,7 @@ export class CameraRunner {
|
||||
}
|
||||
|
||||
sendCommand(
|
||||
command: string,
|
||||
command: 'reboot' | 'restart',
|
||||
callback: (response: { succeed: boolean; message?: string }) => void
|
||||
) {
|
||||
if (this.socket == null || !this.socket.connected)
|
||||
|
||||
@@ -102,6 +102,7 @@ export interface Config {
|
||||
webServer: ConfigWebServer;
|
||||
unity: ConfigUnity;
|
||||
cameraRunner: ConfigCameraRunner;
|
||||
support: ConfigSupport;
|
||||
}
|
||||
|
||||
export interface ConfigWebServer {
|
||||
@@ -132,3 +133,7 @@ export interface ConfigCameraRunner {
|
||||
|
||||
pollInterval: number;
|
||||
}
|
||||
|
||||
export interface ConfigSupport {
|
||||
telephone: string;
|
||||
}
|
||||
|
||||
@@ -27,4 +27,7 @@ export const DefaultConfiguration: Config = {
|
||||
|
||||
pollInterval: 5000,
|
||||
},
|
||||
support: {
|
||||
telephone: '+31613392837',
|
||||
},
|
||||
};
|
||||
|
||||
31
src/Main.ts
31
src/Main.ts
@@ -31,4 +31,35 @@ export class Main {
|
||||
this.UnityRunner.start();
|
||||
}, this.Config.unity.executable.startUpDelay ?? 0);
|
||||
}
|
||||
|
||||
async restart() {
|
||||
console.log('Stopping UnityRunner...');
|
||||
await this.UnityRunner.stop();
|
||||
|
||||
const doReboot = !process.argv.includes('--no-reboot');
|
||||
console.log(`${doReboot ? 'Rebooting' : 'Restarting'} CameraRunner...`);
|
||||
const succeed = await new Promise((resolve) => {
|
||||
this.CameraRunner.sendCommand(
|
||||
doReboot ? 'reboot' : 'restart',
|
||||
(response: { succeed: boolean; message?: string }) => {
|
||||
if (!response.succeed) {
|
||||
console.error(
|
||||
'Failed to reboot CameraRunner:',
|
||||
response.message
|
||||
);
|
||||
resolve(false);
|
||||
} else {
|
||||
console.log('CameraRunner rebooted successfully.');
|
||||
resolve(true);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
if (!succeed) return;
|
||||
|
||||
console.log('Starting UnityRunner...');
|
||||
await this.UnityRunner.start();
|
||||
|
||||
console.log('Restart complete.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,42 +82,77 @@ export class UnityRunner {
|
||||
else console.log(PREFIX, message ?? error);
|
||||
}
|
||||
|
||||
private restartTriggered: boolean = false;
|
||||
async restart(instant: boolean = false) {
|
||||
if (this.restartTriggered) return;
|
||||
clearInterval(this.statusClock);
|
||||
async stop() {
|
||||
if (this.process == null) return;
|
||||
|
||||
this._Main.WebServer.Calibration.hasCalibrationImage = false;
|
||||
this.restartTriggered = true;
|
||||
|
||||
if (this._Main.UnityWebSocket.state === 'CONNECTED') {
|
||||
this._Main.UnityWebSocket.quitApplication();
|
||||
|
||||
this.setInfo(
|
||||
'Requested quit through WebSocket...',
|
||||
null,
|
||||
'STARTING'
|
||||
);
|
||||
} else {
|
||||
this.process.kill('SIGTERM');
|
||||
this.setInfo('Requested quit through SIGTERM...', null, 'STARTING');
|
||||
}
|
||||
|
||||
const quitSucceeded = await new Promise((resolve) => {
|
||||
const timeout = setTimeout(() => {
|
||||
clearInterval(c);
|
||||
resolve(false);
|
||||
}, 5000);
|
||||
|
||||
const c = setInterval(() => {
|
||||
if (
|
||||
this.process != null &&
|
||||
!this.process.killed &&
|
||||
this.process.exitCode == null
|
||||
)
|
||||
return;
|
||||
|
||||
clearTimeout(timeout);
|
||||
clearInterval(c);
|
||||
resolve(true);
|
||||
});
|
||||
});
|
||||
|
||||
if (!quitSucceeded) this.process.kill('SIGKILL');
|
||||
|
||||
this.setInfo('Stopped', null, 'STOPPED');
|
||||
|
||||
this._Main.UnityWebSocket.disconnect();
|
||||
|
||||
this._Main.WebServer.Calibration.hasCalibrationImage = false;
|
||||
this.startTime = -1;
|
||||
}
|
||||
|
||||
restartTriggered: boolean = false;
|
||||
async restart(instant: boolean = false) {
|
||||
if (this.restartTriggered) return;
|
||||
this.restartTriggered = true;
|
||||
clearInterval(this.statusClock);
|
||||
|
||||
this.startTime = -1;
|
||||
this.broadcastState();
|
||||
|
||||
await delay(2000);
|
||||
if (!instant) await delay(2000);
|
||||
|
||||
if (this.output.current.length > 0) {
|
||||
this.output.last = [...this.output.current];
|
||||
this.output.current = [];
|
||||
}
|
||||
|
||||
if (instant)
|
||||
await this.stop();
|
||||
|
||||
if (instant) {
|
||||
await delay(1000);
|
||||
this.setInfo('Process will restart shortly...', null, 'STOPPED');
|
||||
|
||||
if (this.process != null) {
|
||||
this.process.kill('SIGTERM');
|
||||
|
||||
await delay(3000);
|
||||
|
||||
if (!this.process.killed && this.process.exitCode === null) {
|
||||
this.process.kill('SIGKILL');
|
||||
console.log(PREFIX, 'Sent SIGKILL to process.');
|
||||
}
|
||||
}
|
||||
this.startTime = -1;
|
||||
|
||||
if (!instant) {
|
||||
await delay(2000);
|
||||
} else {
|
||||
this.message = 'Reconnecting in 10 seconds...';
|
||||
this.broadcastState();
|
||||
|
||||
@@ -199,7 +234,7 @@ export class UnityRunner {
|
||||
this.setInfo(
|
||||
'Process exited',
|
||||
`Process exited with code ${code} and signal ${signal}`,
|
||||
'STOPPED'
|
||||
'PROBLEM'
|
||||
);
|
||||
this.restart();
|
||||
});
|
||||
|
||||
@@ -17,7 +17,9 @@ export class UnityWebSocket {
|
||||
zedPath: '',
|
||||
zedReady: false,
|
||||
zedFPS: '-',
|
||||
parameters: [],
|
||||
outOfService: null,
|
||||
sliders: [],
|
||||
sensors: [],
|
||||
};
|
||||
|
||||
socket: WebSocket;
|
||||
@@ -32,30 +34,72 @@ export class UnityWebSocket {
|
||||
const sliderIndex: number = args[0];
|
||||
const percentage: number = args[1];
|
||||
|
||||
if (this.parameters.parameters[sliderIndex] == undefined)
|
||||
return;
|
||||
this.parameters.parameters[sliderIndex].outputValue =
|
||||
percentage;
|
||||
this.setSliderValue(sliderIndex, percentage);
|
||||
break;
|
||||
|
||||
if (
|
||||
this.socket == null ||
|
||||
this.socket.readyState !== WebSocket.OPEN
|
||||
)
|
||||
return;
|
||||
case 'enableOutOfService':
|
||||
const enableCallback: Function = args[0];
|
||||
if (typeof enableCallback !== 'function') return;
|
||||
|
||||
this.socket.send(
|
||||
JSON.stringify({
|
||||
type: 'set_slider_value',
|
||||
sliderIndex: sliderIndex,
|
||||
sliderValue: percentage,
|
||||
})
|
||||
);
|
||||
this.setOutOfService(true);
|
||||
|
||||
this.broadcastState();
|
||||
enableCallback({ succeed: true });
|
||||
break;
|
||||
|
||||
case 'disableOutOfService':
|
||||
const disableCallback: Function = args[0];
|
||||
if (typeof disableCallback !== 'function') return;
|
||||
|
||||
this.setOutOfService(false);
|
||||
|
||||
disableCallback({ succeed: true });
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
quitApplication() {
|
||||
if (this.socket == null || this.socket.readyState !== WebSocket.OPEN)
|
||||
return;
|
||||
|
||||
this.socket.send(
|
||||
JSON.stringify({
|
||||
type: 'quit_application',
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
setSliderValue(sliderIndex: number, sliderValue: number) {
|
||||
if (this.socket == null || this.socket.readyState !== WebSocket.OPEN)
|
||||
return;
|
||||
|
||||
this.socket.send(
|
||||
JSON.stringify({
|
||||
type: 'set_slider_value',
|
||||
sliderIndex,
|
||||
sliderValue,
|
||||
})
|
||||
);
|
||||
|
||||
if (this.parameters.sliders[sliderIndex] == undefined) return;
|
||||
this.parameters.sliders[sliderIndex].outputValue = sliderValue;
|
||||
this.broadcastState();
|
||||
}
|
||||
|
||||
setOutOfService(state: boolean) {
|
||||
if (this.socket == null || this.socket.readyState !== WebSocket.OPEN)
|
||||
return;
|
||||
|
||||
this.socket.send(
|
||||
JSON.stringify({
|
||||
type: 'set_out_of_service',
|
||||
showOutOfService: state,
|
||||
})
|
||||
);
|
||||
|
||||
this.parameters.outOfService = true;
|
||||
this.broadcastState();
|
||||
}
|
||||
|
||||
broadcastState() {
|
||||
this._Main.WebServer.socket.emit(
|
||||
'unityWebSocketState',
|
||||
@@ -99,7 +143,28 @@ export class UnityWebSocket {
|
||||
this.parameters.zedReady =
|
||||
message.heartbeat.zedCamera.isZedReady;
|
||||
this.parameters.zedFPS = message.heartbeat.zedCamera.cameraFPS;
|
||||
this.parameters.parameters = message.heartbeat.dataSliders;
|
||||
this.parameters.outOfService =
|
||||
message.heartbeat.showOutOfService ?? false;
|
||||
this.parameters.sensors = message.heartbeat.dataSensors;
|
||||
this.parameters.sliders = message.heartbeat.dataSliders.map(
|
||||
(slider) => {
|
||||
return {
|
||||
...slider,
|
||||
min: slider.min ?? 0,
|
||||
max: slider.max ?? 1,
|
||||
unit: slider.unit ?? '%',
|
||||
visualMultiplier:
|
||||
(slider.min ?? 0) == 0 && (slider.max ?? 1) == 1
|
||||
? 100
|
||||
: null,
|
||||
decimalPlaces:
|
||||
(slider.min ?? 0) == 0 && (slider.max ?? 1) == 1
|
||||
? 0
|
||||
: 2,
|
||||
} as UnityParameterSlider;
|
||||
}
|
||||
);
|
||||
|
||||
this.broadcastState();
|
||||
break;
|
||||
|
||||
@@ -182,6 +247,7 @@ export class UnityWebSocket {
|
||||
});
|
||||
|
||||
this.socket.on('close', () => {
|
||||
if (this._Main.UnityRunner.restartTriggered) return;
|
||||
if (this.restartRequested) return;
|
||||
this.setInfo(
|
||||
'Disconnected',
|
||||
@@ -247,7 +313,16 @@ interface UnityParameters {
|
||||
zedPath: string;
|
||||
zedReady: boolean;
|
||||
zedFPS: string;
|
||||
parameters: UnitySocketMessageHeartbeat['heartbeat']['dataSliders'];
|
||||
outOfService: boolean;
|
||||
sliders: UnityParameterSlider[];
|
||||
sensors: UnitySocketMessageHeartbeat['heartbeat']['dataSensors'];
|
||||
}
|
||||
|
||||
type UnityHeartbeatSlider =
|
||||
UnitySocketMessageHeartbeat['heartbeat']['dataSliders'][number];
|
||||
interface UnityParameterSlider extends UnityHeartbeatSlider {
|
||||
visualMultiplier?: number;
|
||||
decimalPlaces?: number;
|
||||
}
|
||||
|
||||
type UnitySocketMessage =
|
||||
@@ -261,10 +336,18 @@ interface UnitySocketMessageBase {
|
||||
interface UnitySocketMessageHeartbeat extends UnitySocketMessageBase {
|
||||
type: 'heartbeat_data';
|
||||
heartbeat: {
|
||||
dataSensors: {
|
||||
sensorIndex: number;
|
||||
deviceName: string;
|
||||
outputValue: number;
|
||||
}[];
|
||||
dataSliders: {
|
||||
sliderIndex: number;
|
||||
sliderName: string;
|
||||
outputValue: number;
|
||||
min: number;
|
||||
max: number;
|
||||
unit: string;
|
||||
}[];
|
||||
dataTimeline: {
|
||||
isStanding: boolean;
|
||||
@@ -278,6 +361,7 @@ interface UnitySocketMessageHeartbeat extends UnitySocketMessageBase {
|
||||
streamInputPort: number;
|
||||
zedGrabError: number;
|
||||
};
|
||||
showOutOfService?: boolean;
|
||||
};
|
||||
}
|
||||
interface UnitySocketMessageCameraFrame extends UnitySocketMessageBase {
|
||||
|
||||
@@ -50,7 +50,30 @@ export class WebServer {
|
||||
'unityWebSocketState',
|
||||
this._Main.UnityWebSocket.getState()
|
||||
);
|
||||
socket.emit(
|
||||
'supportNumber',
|
||||
this._Main.Config.support.telephone.replace('+', '')
|
||||
);
|
||||
|
||||
socket.on(
|
||||
'restartInstallation',
|
||||
(
|
||||
callback: (response: {
|
||||
succeed: boolean;
|
||||
message?: string;
|
||||
}) => void
|
||||
) => {
|
||||
if (this._Main.CameraRunner.state !== 'CONNECTED')
|
||||
return callback({
|
||||
succeed: false,
|
||||
message:
|
||||
'Cannot reboot camera runner because it is not connected.',
|
||||
});
|
||||
|
||||
this._Main.restart();
|
||||
callback({ succeed: true });
|
||||
}
|
||||
);
|
||||
socket.on('cameraRunner', (command: string, ...args: any[]) =>
|
||||
this._Main.CameraRunner.handle(command, ...args)
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user