Added basic control panel
This commit is contained in:
31
README.md
31
README.md
@@ -6,17 +6,17 @@ A Node.js control system for Nothing to See Here installation.
|
|||||||
|
|
||||||
NTSH-Control provides centralized control and monitoring of:
|
NTSH-Control provides centralized control and monitoring of:
|
||||||
|
|
||||||
- [Camera Runner](https://git.morphix.nl/Nothing-to-See-Here/NTSH-CameraRunner) process via WebSocket communication
|
- [Camera Runner](https://git.morphix.nl/Nothing-to-See-Here/NTSH-CameraRunner) process via WebSocket communication
|
||||||
- Unity application monitoring and lifecycle management
|
- Unity application monitoring and lifecycle management
|
||||||
- Real-time system status and calibration through a web dashboard
|
- Real-time system status and calibration through a web dashboard
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- **Web Dashboard**: Monitor system status and control components through a browser interface
|
- **Web Dashboard**: Monitor system status and control components through a browser interface
|
||||||
- **Camera Management**: Real-time connection monitoring and process control
|
- **Camera Management**: Real-time connection monitoring and process control
|
||||||
- **Unity Integration**: Automatic startup and WebSocket communication with Unity applications
|
- **Unity Integration**: Automatic startup and WebSocket communication with Unity applications
|
||||||
- **Calibration Tools**: Live image streaming and calibration interface
|
- **Calibration Tools**: Live image streaming and calibration interface
|
||||||
- **Process Monitoring**: Track uptime, connection status, and system health
|
- **Process Monitoring**: Track uptime, connection status, and system health
|
||||||
|
|
||||||
## Installation & Setup
|
## Installation & Setup
|
||||||
|
|
||||||
@@ -38,10 +38,10 @@ NTSH-Control provides centralized control and monitoring of:
|
|||||||
|
|
||||||
Configuration is stored in `~/MorphixProductions/NTSHControl/config.json`. Default settings include:
|
Configuration is stored in `~/MorphixProductions/NTSHControl/config.json`. Default settings include:
|
||||||
|
|
||||||
- Web server port: `6300`
|
- Web server port: `6300`
|
||||||
- Unity WebSocket: `127.0.0.1:3000`
|
- Unity WebSocket: `127.0.0.1:3000`
|
||||||
- [Camera Runner](https://git.morphix.nl/Nothing-to-See-Here/NTSH-CameraRunner) WebSocket: `127.0.0.1:6301`
|
- [Camera Runner](https://git.morphix.nl/Nothing-to-See-Here/NTSH-CameraRunner) WebSocket: `127.0.0.1:6301`
|
||||||
- Unity startup delay: `5000ms`
|
- Unity startup delay: `5000ms`
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
@@ -49,6 +49,7 @@ The system automatically starts the web server and attempts to connect to the co
|
|||||||
|
|
||||||
## Project Structure
|
## Project Structure
|
||||||
|
|
||||||
- `src/` - TypeScript source code
|
- `src/` - TypeScript source code
|
||||||
- `frontend/views/dashboard/` - Web interface
|
- `frontend/views/dashboard/` - V2 web interface
|
||||||
- `dist/` - Compiled JavaScript output
|
- `frontend/views/dashboard/` - Legacy web interface
|
||||||
|
- `dist/` - Compiled JavaScript output
|
||||||
|
|||||||
21
TODO.md
21
TODO.md
@@ -1,13 +1,8 @@
|
|||||||
- **SMS Service met log**
|
- **SMS Service met log**
|
||||||
- ✅ Feedback van dataSensor array
|
- ✅ Feedback van dataSensor array
|
||||||
- ✅ dataSliders min/max and unit
|
- ✅ dataSliders min/max and unit
|
||||||
- ✅ Camera before Unity
|
- ✅ Camera before Unity
|
||||||
- ✅ Restart knop buiten service mode
|
- ✅ Restart knop buiten service mode
|
||||||
- ✅ Operator phonenumber button
|
- ✅ Operator phonenumber button
|
||||||
- ✅ Gracefull shutdown
|
- ✅ Gracefull shutdown
|
||||||
- ✅ Out of service control
|
- ✅ Out of service control
|
||||||
|
|
||||||
Checken met Sjoerd
|
|
||||||
|
|
||||||
- Sliders opslaan
|
|
||||||
- Camera error code
|
|
||||||
|
|||||||
132
dist/Audio.js
vendored
Normal file
132
dist/Audio.js
vendored
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
"use strict";
|
||||||
|
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) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
||||||
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
||||||
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
||||||
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
||||||
|
function step(op) {
|
||||||
|
if (f) throw new TypeError("Generator is already executing.");
|
||||||
|
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
||||||
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
||||||
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
||||||
|
switch (op[0]) {
|
||||||
|
case 0: case 1: t = op; break;
|
||||||
|
case 4: _.label++; return { value: op[1], done: false };
|
||||||
|
case 5: _.label++; y = op[1]; op = [0]; continue;
|
||||||
|
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
||||||
|
default:
|
||||||
|
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
||||||
|
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
||||||
|
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
||||||
|
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
||||||
|
if (t[2]) _.ops.pop();
|
||||||
|
_.trys.pop(); continue;
|
||||||
|
}
|
||||||
|
op = body.call(thisArg, _);
|
||||||
|
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
||||||
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.AudioChecker = void 0;
|
||||||
|
var fs_extra_1 = require("fs-extra");
|
||||||
|
var path_1 = require("path");
|
||||||
|
var portAudio = require('naudiodon');
|
||||||
|
var PREFIX = '[Audio]';
|
||||||
|
var AudioChecker = /** @class */ (function () {
|
||||||
|
function AudioChecker(Main) {
|
||||||
|
this.deviceName = null;
|
||||||
|
this._Main = Main;
|
||||||
|
this.configPath = (0, path_1.join)(this._Main.dataPath, 'audio.json');
|
||||||
|
this.load();
|
||||||
|
}
|
||||||
|
AudioChecker.prototype.waitForDevice = function () {
|
||||||
|
var _a;
|
||||||
|
return __awaiter(this, void 0, void 0, function () {
|
||||||
|
var counter;
|
||||||
|
var _this = this;
|
||||||
|
return __generator(this, function (_b) {
|
||||||
|
if (((_a = this.deviceName) !== null && _a !== void 0 ? _a : '').trim().length == 0) {
|
||||||
|
console.log(PREFIX, 'No audio device configured, skipping audio check. Available devices:');
|
||||||
|
portAudio
|
||||||
|
.getDevices()
|
||||||
|
.filter(function (device) { return device.maxOutputChannels > 0; })
|
||||||
|
.forEach(function (device) {
|
||||||
|
console.log(" - ".concat(device.name));
|
||||||
|
});
|
||||||
|
return [2 /*return*/];
|
||||||
|
}
|
||||||
|
console.log(PREFIX, "Waiting for device \"".concat(this.deviceName, "\"..."));
|
||||||
|
counter = 0;
|
||||||
|
return [2 /*return*/, new Promise(function (resolve) {
|
||||||
|
var c = setInterval(function () {
|
||||||
|
var _a;
|
||||||
|
counter++;
|
||||||
|
var availableDevices = portAudio
|
||||||
|
.getDevices()
|
||||||
|
.filter(function (device) { return device.maxOutputChannels > 0; })
|
||||||
|
.map(function (device) { return device.name; });
|
||||||
|
if (!availableDevices.includes(_this.deviceName)) {
|
||||||
|
if (counter == 3) {
|
||||||
|
console.log(PREFIX, 'Trouble finding the correct device. Available devices:');
|
||||||
|
availableDevices.forEach(function (device) {
|
||||||
|
console.log(" - ".concat(device));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var hostApis = portAudio.getHostAPIs();
|
||||||
|
var defaultOutputDeviceId = hostApis.HostAPIs[hostApis.defaultHostAPI].defaultOutput;
|
||||||
|
var defaultOutputDeviceName = (_a = portAudio
|
||||||
|
.getDevices()
|
||||||
|
.find(function (device) { return device.id === defaultOutputDeviceId; })) === null || _a === void 0 ? void 0 : _a.name;
|
||||||
|
if (defaultOutputDeviceName !== _this.deviceName) {
|
||||||
|
console.warn(PREFIX, "The configured device \"".concat(_this.deviceName, "\" is not set as the default output device. Please set it as the default output device to ensure proper functionality. Current default output device: \"").concat(defaultOutputDeviceName, "\"."));
|
||||||
|
_this._Main.Twilio.sendError('Audio', "The configured device \"".concat(_this.deviceName, "\" is not set as the default output device. Current default output device: \"").concat(defaultOutputDeviceName, "\"."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
clearInterval(c);
|
||||||
|
resolve();
|
||||||
|
console.log(PREFIX, "Device \"".concat(_this.deviceName, "\" is ready!"));
|
||||||
|
}, 1000);
|
||||||
|
})];
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
AudioChecker.prototype.load = function () {
|
||||||
|
console.log(PREFIX, 'Loading audio configuration...');
|
||||||
|
var exists = (0, fs_extra_1.pathExistsSync)(this.configPath);
|
||||||
|
if (!exists)
|
||||||
|
return this.save();
|
||||||
|
var data = (0, fs_extra_1.readJSONSync)(this.configPath);
|
||||||
|
this.deviceName = data.deviceName;
|
||||||
|
};
|
||||||
|
AudioChecker.prototype.save = function () {
|
||||||
|
return __awaiter(this, void 0, void 0, function () {
|
||||||
|
var _this = this;
|
||||||
|
return __generator(this, function (_a) {
|
||||||
|
if (this._save)
|
||||||
|
clearTimeout(this._save);
|
||||||
|
this._save = setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
|
||||||
|
var _a;
|
||||||
|
return __generator(this, function (_b) {
|
||||||
|
(0, fs_extra_1.writeFile)(this.configPath, JSON.stringify({ deviceName: (_a = this.deviceName) !== null && _a !== void 0 ? _a : null }, null, 4));
|
||||||
|
return [2 /*return*/];
|
||||||
|
});
|
||||||
|
}); }, 1000);
|
||||||
|
return [2 /*return*/];
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
return AudioChecker;
|
||||||
|
}());
|
||||||
|
exports.AudioChecker = AudioChecker;
|
||||||
|
//# sourceMappingURL=Audio.js.map
|
||||||
1
dist/Audio.js.map
vendored
Normal file
1
dist/Audio.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"Audio.js","sourceRoot":"","sources":["../src/Audio.ts"],"names":[],"mappings":"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"}
|
||||||
34
dist/CameraRunner.js
vendored
34
dist/CameraRunner.js
vendored
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
||||||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
||||||
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
||||||
function verb(n) { return function (v) { return step([n, v]); }; }
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
||||||
function step(op) {
|
function step(op) {
|
||||||
if (f) throw new TypeError("Generator is already executing.");
|
if (f) throw new TypeError("Generator is already executing.");
|
||||||
@@ -36,9 +36,10 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.CameraRunner = void 0;
|
exports.CameraProcessStateColors = exports.CameraPCStateColors = exports.CameraRunner = void 0;
|
||||||
var socket_io_client_1 = require("socket.io-client");
|
var socket_io_client_1 = require("socket.io-client");
|
||||||
var Utils_1 = require("./Utils");
|
var Utils_1 = require("./Utils");
|
||||||
|
var Status_1 = require("./Status");
|
||||||
var PREFIX = "[CameraRunner]";
|
var PREFIX = "[CameraRunner]";
|
||||||
var CameraRunner = /** @class */ (function () {
|
var CameraRunner = /** @class */ (function () {
|
||||||
function CameraRunner(Main) {
|
function CameraRunner(Main) {
|
||||||
@@ -93,6 +94,11 @@ var CameraRunner = /** @class */ (function () {
|
|||||||
this.message = message;
|
this.message = message;
|
||||||
this.error = error;
|
this.error = error;
|
||||||
this.state = state;
|
this.state = state;
|
||||||
|
this._Main.Status.update(Status_1.StatusType.CameraPC, exports.CameraPCStateColors[this.state], message, {
|
||||||
|
reboot: state === 'FAILED' ||
|
||||||
|
state === 'DISCONNECTED' ||
|
||||||
|
state == 'CONNECTED',
|
||||||
|
});
|
||||||
this.broadcastState();
|
this.broadcastState();
|
||||||
if (error != null &&
|
if (error != null &&
|
||||||
Date.now() - this.bootTime > this.errorTriggerStartupDelay)
|
Date.now() - this.bootTime > this.errorTriggerStartupDelay)
|
||||||
@@ -117,6 +123,11 @@ var CameraRunner = /** @class */ (function () {
|
|||||||
case 1:
|
case 1:
|
||||||
data = _a.sent();
|
data = _a.sent();
|
||||||
this.processStatus = data;
|
this.processStatus = data;
|
||||||
|
this._Main.Status.update(Status_1.StatusType.CameraProcess, exports.CameraProcessStateColors[this.processStatus.state], this.processStatus.message, {
|
||||||
|
reboot: this.processStatus.state === 'PROBLEM' ||
|
||||||
|
this.processStatus.state === 'STOPPED' ||
|
||||||
|
this.processStatus.state === 'RUNNING',
|
||||||
|
});
|
||||||
this.broadcastState();
|
this.broadcastState();
|
||||||
return [2 /*return*/];
|
return [2 /*return*/];
|
||||||
}
|
}
|
||||||
@@ -126,6 +137,11 @@ var CameraRunner = /** @class */ (function () {
|
|||||||
_this.processStatus.state = simpleStatus.state;
|
_this.processStatus.state = simpleStatus.state;
|
||||||
_this.processStatus.message = simpleStatus.message;
|
_this.processStatus.message = simpleStatus.message;
|
||||||
_this.processStatus.error = simpleStatus.error;
|
_this.processStatus.error = simpleStatus.error;
|
||||||
|
_this._Main.Status.update(Status_1.StatusType.CameraProcess, exports.CameraProcessStateColors[_this.processStatus.state], _this.processStatus.message, {
|
||||||
|
reboot: _this.processStatus.state === 'PROBLEM' ||
|
||||||
|
_this.processStatus.state === 'STOPPED' ||
|
||||||
|
_this.processStatus.state === 'RUNNING',
|
||||||
|
});
|
||||||
_this.broadcastState();
|
_this.broadcastState();
|
||||||
});
|
});
|
||||||
clearInterval(this.pollClock);
|
clearInterval(this.pollClock);
|
||||||
@@ -218,4 +234,16 @@ var CameraRunner = /** @class */ (function () {
|
|||||||
return CameraRunner;
|
return CameraRunner;
|
||||||
}());
|
}());
|
||||||
exports.CameraRunner = CameraRunner;
|
exports.CameraRunner = CameraRunner;
|
||||||
|
exports.CameraPCStateColors = {
|
||||||
|
CONNECTED: Status_1.State.Green,
|
||||||
|
DISCONNECTED: Status_1.State.Gray,
|
||||||
|
CONNECTING: Status_1.State.Yellow,
|
||||||
|
FAILED: Status_1.State.Red,
|
||||||
|
};
|
||||||
|
exports.CameraProcessStateColors = {
|
||||||
|
RUNNING: Status_1.State.Green,
|
||||||
|
STOPPED: Status_1.State.Gray,
|
||||||
|
STARTING: Status_1.State.Yellow,
|
||||||
|
PROBLEM: Status_1.State.Red,
|
||||||
|
};
|
||||||
//# sourceMappingURL=CameraRunner.js.map
|
//# sourceMappingURL=CameraRunner.js.map
|
||||||
2
dist/CameraRunner.js.map
vendored
2
dist/CameraRunner.js.map
vendored
File diff suppressed because one or more lines are too long
4
dist/Configuration/ConfigurationManager.js
vendored
4
dist/Configuration/ConfigurationManager.js
vendored
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
||||||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
||||||
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
||||||
function verb(n) { return function (v) { return step([n, v]); }; }
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
||||||
function step(op) {
|
function step(op) {
|
||||||
if (f) throw new TypeError("Generator is already executing.");
|
if (f) throw new TypeError("Generator is already executing.");
|
||||||
|
|||||||
1
dist/Configuration/DefaultConfiguration.js
vendored
1
dist/Configuration/DefaultConfiguration.js
vendored
@@ -21,6 +21,7 @@ exports.DefaultConfiguration = {
|
|||||||
},
|
},
|
||||||
heartbeatInterval: 1000,
|
heartbeatInterval: 1000,
|
||||||
calibrationImageInterval: 2000,
|
calibrationImageInterval: 2000,
|
||||||
|
launchOnStartup: true,
|
||||||
},
|
},
|
||||||
cameraRunner: {
|
cameraRunner: {
|
||||||
webSocket: {
|
webSocket: {
|
||||||
|
|||||||
@@ -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,MAAM,EAAE;QACP,EAAE,EAAE,EAAE;QACN,cAAc,EAAE,IAAI;KACpB;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,MAAM,EAAE;QACP,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE;QACb,gBAAgB,EAAE,KAAK;QACvB,iBAAiB,EAAE,EAAE;KACrB;IACD,OAAO,EAAE;QACR,SAAS,EAAE,cAAc;KACzB;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,MAAM,EAAE;QACP,EAAE,EAAE,EAAE;QACN,cAAc,EAAE,IAAI;KACpB;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;QAC9B,eAAe,EAAE,IAAI;KACrB;IACD,YAAY,EAAE;QACb,SAAS,EAAE;YACV,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,IAAI;SACV;QAED,YAAY,EAAE,IAAI;KAClB;IACD,MAAM,EAAE;QACP,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE;QACb,gBAAgB,EAAE,KAAK;QACvB,iBAAiB,EAAE,EAAE;KACrB;IACD,OAAO,EAAE;QACR,SAAS,EAAE,cAAc;KACzB;CACD,CAAC"}
|
||||||
132
dist/Configuration/Timer copy.js
vendored
Normal file
132
dist/Configuration/Timer copy.js
vendored
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
"use strict";
|
||||||
|
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) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
||||||
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
||||||
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
||||||
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
||||||
|
function step(op) {
|
||||||
|
if (f) throw new TypeError("Generator is already executing.");
|
||||||
|
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
||||||
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
||||||
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
||||||
|
switch (op[0]) {
|
||||||
|
case 0: case 1: t = op; break;
|
||||||
|
case 4: _.label++; return { value: op[1], done: false };
|
||||||
|
case 5: _.label++; y = op[1]; op = [0]; continue;
|
||||||
|
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
||||||
|
default:
|
||||||
|
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
||||||
|
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
||||||
|
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
||||||
|
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
||||||
|
if (t[2]) _.ops.pop();
|
||||||
|
_.trys.pop(); continue;
|
||||||
|
}
|
||||||
|
op = body.call(thisArg, _);
|
||||||
|
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
||||||
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.Timer = void 0;
|
||||||
|
var path_1 = require("path");
|
||||||
|
var fs_extra_1 = require("fs-extra");
|
||||||
|
var UnityRunner_1 = require("../Unity/UnityRunner");
|
||||||
|
var PREFIX = '[Main]';
|
||||||
|
var Timer = /** @class */ (function () {
|
||||||
|
function Timer(Main) {
|
||||||
|
this.start = {
|
||||||
|
hour: null,
|
||||||
|
minute: null,
|
||||||
|
};
|
||||||
|
this.end = {
|
||||||
|
hour: null,
|
||||||
|
minute: null,
|
||||||
|
};
|
||||||
|
this._Main = Main;
|
||||||
|
this.configPath = (0, path_1.join)(this._Main.dataPath, 'timer.json');
|
||||||
|
}
|
||||||
|
Timer.prototype.startClock = function () {
|
||||||
|
var _this = this;
|
||||||
|
setInterval(function () {
|
||||||
|
var startTime = new Date();
|
||||||
|
startTime.setHours(_this.start.hour, _this.start.minute, 0, 0);
|
||||||
|
var endTime = new Date();
|
||||||
|
endTime.setHours(_this.end.hour, _this.end.minute, 0, 0);
|
||||||
|
var shouldBeStarted = startTime <= new Date() && endTime > new Date();
|
||||||
|
if (shouldBeStarted) {
|
||||||
|
if (_this._Main.UnityRunner.state !== 'RUNNING' &&
|
||||||
|
_this._Main.UnityRunner.state !== 'STARTING') {
|
||||||
|
console.log(PREFIX, 'Starting Unity');
|
||||||
|
_this._Main.UnityRunner.start(UnityRunner_1.StartOrigin.Timer);
|
||||||
|
}
|
||||||
|
else if (_this._Main.UnityRunner.startOrigin !== UnityRunner_1.StartOrigin.Timer) {
|
||||||
|
console.log(PREFIX, 'Already running');
|
||||||
|
_this._Main.UnityRunner.startOrigin = UnityRunner_1.StartOrigin.Timer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (_this._Main.UnityRunner.state === 'RUNNING' &&
|
||||||
|
_this._Main.UnityRunner.startOrigin === UnityRunner_1.StartOrigin.Timer) {
|
||||||
|
console.log(PREFIX, 'Stopping Unity');
|
||||||
|
_this._Main.UnityRunner.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 5000);
|
||||||
|
};
|
||||||
|
Timer.prototype.load = function () {
|
||||||
|
return __awaiter(this, void 0, void 0, function () {
|
||||||
|
var exists, data;
|
||||||
|
return __generator(this, function (_a) {
|
||||||
|
switch (_a.label) {
|
||||||
|
case 0:
|
||||||
|
console.log(PREFIX, 'Loading timer configuration...');
|
||||||
|
return [4 /*yield*/, (0, fs_extra_1.pathExists)(this.configPath)];
|
||||||
|
case 1:
|
||||||
|
exists = _a.sent();
|
||||||
|
if (!exists) {
|
||||||
|
this.save();
|
||||||
|
return [2 /*return*/, this.startClock()];
|
||||||
|
}
|
||||||
|
return [4 /*yield*/, (0, fs_extra_1.readJSON)(this.configPath)];
|
||||||
|
case 2:
|
||||||
|
data = _a.sent();
|
||||||
|
this.start = data.start;
|
||||||
|
this.end = data.end;
|
||||||
|
this.startClock();
|
||||||
|
return [2 /*return*/];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
Timer.prototype.save = function () {
|
||||||
|
return __awaiter(this, void 0, void 0, function () {
|
||||||
|
var _this = this;
|
||||||
|
return __generator(this, function (_a) {
|
||||||
|
if (this._save)
|
||||||
|
clearTimeout(this._save);
|
||||||
|
this._save = setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
|
||||||
|
return __generator(this, function (_a) {
|
||||||
|
(0, fs_extra_1.writeJSON)(this.configPath, {
|
||||||
|
start: this.start,
|
||||||
|
end: this.end,
|
||||||
|
});
|
||||||
|
return [2 /*return*/];
|
||||||
|
});
|
||||||
|
}); }, 1000);
|
||||||
|
return [2 /*return*/];
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
return Timer;
|
||||||
|
}());
|
||||||
|
exports.Timer = Timer;
|
||||||
|
//# sourceMappingURL=Timer%20copy.js.map
|
||||||
1
dist/Configuration/Timer copy.js.map
vendored
Normal file
1
dist/Configuration/Timer copy.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"Timer copy.js","sourceRoot":"","sources":["../../src/Configuration/Timer copy.ts"],"names":[],"mappings":"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"}
|
||||||
145
dist/Configuration/Timer.js
vendored
Normal file
145
dist/Configuration/Timer.js
vendored
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
"use strict";
|
||||||
|
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) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
||||||
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
||||||
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
||||||
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
||||||
|
function step(op) {
|
||||||
|
if (f) throw new TypeError("Generator is already executing.");
|
||||||
|
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
||||||
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
||||||
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
||||||
|
switch (op[0]) {
|
||||||
|
case 0: case 1: t = op; break;
|
||||||
|
case 4: _.label++; return { value: op[1], done: false };
|
||||||
|
case 5: _.label++; y = op[1]; op = [0]; continue;
|
||||||
|
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
||||||
|
default:
|
||||||
|
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
||||||
|
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
||||||
|
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
||||||
|
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
||||||
|
if (t[2]) _.ops.pop();
|
||||||
|
_.trys.pop(); continue;
|
||||||
|
}
|
||||||
|
op = body.call(thisArg, _);
|
||||||
|
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
||||||
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.Timer = void 0;
|
||||||
|
var path_1 = require("path");
|
||||||
|
var fs_extra_1 = require("fs-extra");
|
||||||
|
var UnityRunner_1 = require("../Unity/UnityRunner");
|
||||||
|
var PREFIX = '[Main]';
|
||||||
|
var Timer = /** @class */ (function () {
|
||||||
|
function Timer(Main) {
|
||||||
|
this.start = {
|
||||||
|
hour: null,
|
||||||
|
minute: null,
|
||||||
|
};
|
||||||
|
this.end = {
|
||||||
|
hour: null,
|
||||||
|
minute: null,
|
||||||
|
};
|
||||||
|
this._Main = Main;
|
||||||
|
this.configPath = (0, path_1.join)(this._Main.dataPath, 'timer.json');
|
||||||
|
}
|
||||||
|
Timer.prototype.getState = function () {
|
||||||
|
return {
|
||||||
|
start: this.start,
|
||||||
|
end: this.end,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
Timer.prototype.setStart = function (data) {
|
||||||
|
this.start = data;
|
||||||
|
this._Main.WebServer.socket.emit('timer', this.getState());
|
||||||
|
this.save();
|
||||||
|
};
|
||||||
|
Timer.prototype.setEnd = function (data) {
|
||||||
|
this.end = data;
|
||||||
|
this._Main.WebServer.socket.emit('timer', this.getState());
|
||||||
|
this.save();
|
||||||
|
};
|
||||||
|
Timer.prototype.startClock = function () {
|
||||||
|
var _this = this;
|
||||||
|
setInterval(function () {
|
||||||
|
var startTime = new Date();
|
||||||
|
startTime.setHours(_this.start.hour, _this.start.minute, 0, 0);
|
||||||
|
var endTime = new Date();
|
||||||
|
endTime.setHours(_this.end.hour, _this.end.minute, 0, 0);
|
||||||
|
var shouldBeStarted = startTime <= new Date() && endTime > new Date();
|
||||||
|
if (shouldBeStarted) {
|
||||||
|
if (_this._Main.UnityRunner.state !== 'RUNNING' &&
|
||||||
|
_this._Main.UnityRunner.state !== 'STARTING') {
|
||||||
|
console.log(PREFIX, 'Starting Unity');
|
||||||
|
_this._Main.UnityRunner.start(UnityRunner_1.StartOrigin.Timer);
|
||||||
|
}
|
||||||
|
else if (_this._Main.UnityRunner.startOrigin !== UnityRunner_1.StartOrigin.Timer) {
|
||||||
|
console.log(PREFIX, 'Already running');
|
||||||
|
_this._Main.UnityRunner.startOrigin = UnityRunner_1.StartOrigin.Timer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (_this._Main.UnityRunner.state === 'RUNNING' &&
|
||||||
|
_this._Main.UnityRunner.startOrigin === UnityRunner_1.StartOrigin.Timer) {
|
||||||
|
console.log(PREFIX, 'Stopping Unity');
|
||||||
|
_this._Main.UnityRunner.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 5000);
|
||||||
|
};
|
||||||
|
Timer.prototype.load = function () {
|
||||||
|
return __awaiter(this, void 0, void 0, function () {
|
||||||
|
var exists, data;
|
||||||
|
return __generator(this, function (_a) {
|
||||||
|
switch (_a.label) {
|
||||||
|
case 0:
|
||||||
|
console.log(PREFIX, 'Loading timer configuration...');
|
||||||
|
return [4 /*yield*/, (0, fs_extra_1.pathExists)(this.configPath)];
|
||||||
|
case 1:
|
||||||
|
exists = _a.sent();
|
||||||
|
if (!exists) {
|
||||||
|
this.save();
|
||||||
|
return [2 /*return*/, this.startClock()];
|
||||||
|
}
|
||||||
|
return [4 /*yield*/, (0, fs_extra_1.readJSON)(this.configPath)];
|
||||||
|
case 2:
|
||||||
|
data = _a.sent();
|
||||||
|
this.start = data.start;
|
||||||
|
this.end = data.end;
|
||||||
|
this.startClock();
|
||||||
|
return [2 /*return*/];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
Timer.prototype.save = function () {
|
||||||
|
return __awaiter(this, void 0, void 0, function () {
|
||||||
|
var _this = this;
|
||||||
|
return __generator(this, function (_a) {
|
||||||
|
if (this._save)
|
||||||
|
clearTimeout(this._save);
|
||||||
|
this._save = setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
|
||||||
|
return __generator(this, function (_a) {
|
||||||
|
(0, fs_extra_1.writeFile)(this.configPath, JSON.stringify({ start: this.start, end: this.end }, null, 4));
|
||||||
|
return [2 /*return*/];
|
||||||
|
});
|
||||||
|
}); }, 1000);
|
||||||
|
return [2 /*return*/];
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
return Timer;
|
||||||
|
}());
|
||||||
|
exports.Timer = Timer;
|
||||||
|
//# sourceMappingURL=Timer.js.map
|
||||||
1
dist/Configuration/Timer.js.map
vendored
Normal file
1
dist/Configuration/Timer.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"Timer.js","sourceRoot":"","sources":["../../src/Configuration/Timer.ts"],"names":[],"mappings":"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"}
|
||||||
138
dist/ConfigurationManager.js
vendored
138
dist/ConfigurationManager.js
vendored
@@ -1,138 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
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) {
|
|
||||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
||||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
||||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
||||||
});
|
|
||||||
};
|
|
||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
||||||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
||||||
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
||||||
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
||||||
function step(op) {
|
|
||||||
if (f) throw new TypeError("Generator is already executing.");
|
|
||||||
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
||||||
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
||||||
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
||||||
switch (op[0]) {
|
|
||||||
case 0: case 1: t = op; break;
|
|
||||||
case 4: _.label++; return { value: op[1], done: false };
|
|
||||||
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
||||||
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
||||||
default:
|
|
||||||
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
||||||
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
||||||
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
||||||
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
||||||
if (t[2]) _.ops.pop();
|
|
||||||
_.trys.pop(); continue;
|
|
||||||
}
|
|
||||||
op = body.call(thisArg, _);
|
|
||||||
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
||||||
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.ConfigurationManager = void 0;
|
|
||||||
var fs_extra_1 = require("fs-extra");
|
|
||||||
var path_1 = require("path");
|
|
||||||
var DefaultConfiguration_1 = require("./Defaults/DefaultConfiguration");
|
|
||||||
var PREFIX = '[ConfigurationManager]';
|
|
||||||
var ConfigurationManager = /** @class */ (function () {
|
|
||||||
function ConfigurationManager(Main) {
|
|
||||||
this._Main = Main;
|
|
||||||
}
|
|
||||||
ConfigurationManager.prototype.load = function () {
|
|
||||||
return __awaiter(this, void 0, void 0, function () {
|
|
||||||
var configPath, configExists, config, _a;
|
|
||||||
return __generator(this, function (_b) {
|
|
||||||
switch (_b.label) {
|
|
||||||
case 0:
|
|
||||||
console.log(PREFIX, 'Loading');
|
|
||||||
return [4 /*yield*/, (0, fs_extra_1.ensureDir)((0, path_1.join)(this._Main.dataPath))];
|
|
||||||
case 1:
|
|
||||||
_b.sent();
|
|
||||||
configPath = (0, path_1.join)(this._Main.dataPath, 'config.json');
|
|
||||||
return [4 /*yield*/, (0, fs_extra_1.pathExists)(configPath)];
|
|
||||||
case 2:
|
|
||||||
configExists = _b.sent();
|
|
||||||
if (!!configExists) return [3 /*break*/, 4];
|
|
||||||
return [4 /*yield*/, (0, fs_extra_1.writeFile)(configPath, JSON.stringify(DefaultConfiguration_1.DefaultConfiguration, null, 4))];
|
|
||||||
case 3:
|
|
||||||
_b.sent();
|
|
||||||
this._Main.Config = DefaultConfiguration_1.DefaultConfiguration;
|
|
||||||
console.log(PREFIX, 'Written default configuration');
|
|
||||||
return [3 /*break*/, 7];
|
|
||||||
case 4: return [4 /*yield*/, (0, fs_extra_1.readJSON)(configPath)];
|
|
||||||
case 5:
|
|
||||||
config = _b.sent();
|
|
||||||
_a = this._Main;
|
|
||||||
return [4 /*yield*/, this.validateConfig(config)];
|
|
||||||
case 6:
|
|
||||||
_a.Config = _b.sent();
|
|
||||||
console.log(PREFIX, 'Loaded configuration');
|
|
||||||
_b.label = 7;
|
|
||||||
case 7: return [2 /*return*/];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
ConfigurationManager.prototype.validateConfig = function (config) {
|
|
||||||
return __awaiter(this, void 0, void 0, function () {
|
|
||||||
var normalizedConfig, hasChanges, configPath;
|
|
||||||
return __generator(this, function (_a) {
|
|
||||||
switch (_a.label) {
|
|
||||||
case 0:
|
|
||||||
normalizedConfig = this.normalizeConfig(config, DefaultConfiguration_1.DefaultConfiguration);
|
|
||||||
hasChanges = JSON.stringify(config) !== JSON.stringify(normalizedConfig);
|
|
||||||
if (!hasChanges) return [3 /*break*/, 2];
|
|
||||||
this._Main.Config = normalizedConfig;
|
|
||||||
configPath = (0, path_1.join)(this._Main.dataPath, 'config.json');
|
|
||||||
return [4 /*yield*/, (0, fs_extra_1.writeFile)(configPath, JSON.stringify(normalizedConfig, null, 4))];
|
|
||||||
case 1:
|
|
||||||
_a.sent();
|
|
||||||
console.log(PREFIX, 'Configuration updated and saved');
|
|
||||||
_a.label = 2;
|
|
||||||
case 2: return [2 /*return*/, normalizedConfig];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
ConfigurationManager.prototype.normalizeConfig = function (current, template) {
|
|
||||||
var _this = this;
|
|
||||||
if (template === null || template === undefined) {
|
|
||||||
return template;
|
|
||||||
}
|
|
||||||
if (typeof template !== 'object' || Array.isArray(template)) {
|
|
||||||
if (current !== null &&
|
|
||||||
current !== undefined &&
|
|
||||||
typeof current === typeof template) {
|
|
||||||
if (Array.isArray(template) && Array.isArray(current)) {
|
|
||||||
if (template.length > 0 &&
|
|
||||||
typeof template[0] === 'object' &&
|
|
||||||
!Array.isArray(template[0])) {
|
|
||||||
return current.map(function (item) {
|
|
||||||
return _this.normalizeConfig(item, template[0]);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
return current;
|
|
||||||
}
|
|
||||||
return template;
|
|
||||||
}
|
|
||||||
var result = {};
|
|
||||||
for (var key in template) {
|
|
||||||
if (template.hasOwnProperty(key)) {
|
|
||||||
result[key] = this.normalizeConfig(current === null || current === void 0 ? void 0 : current[key], template[key]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
return ConfigurationManager;
|
|
||||||
}());
|
|
||||||
exports.ConfigurationManager = ConfigurationManager;
|
|
||||||
//# sourceMappingURL=ConfigurationManager.js.map
|
|
||||||
1
dist/ConfigurationManager.js.map
vendored
1
dist/ConfigurationManager.js.map
vendored
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"ConfigurationManager.js","sourceRoot":"","sources":["../src/ConfigurationManager.ts"],"names":[],"mappings":"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"}
|
|
||||||
84
dist/Main.js
vendored
84
dist/Main.js
vendored
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
||||||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
||||||
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
||||||
function verb(n) { return function (v) { return step([n, v]); }; }
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
||||||
function step(op) {
|
function step(op) {
|
||||||
if (f) throw new TypeError("Generator is already executing.");
|
if (f) throw new TypeError("Generator is already executing.");
|
||||||
@@ -48,41 +48,57 @@ var Twilio_1 = require("./Twilio");
|
|||||||
var Utils_1 = require("./Utils");
|
var Utils_1 = require("./Utils");
|
||||||
var ping = require("ping");
|
var ping = require("ping");
|
||||||
var Shutdown_1 = require("./Shutdown");
|
var Shutdown_1 = require("./Shutdown");
|
||||||
|
var Timer_1 = require("./Configuration/Timer");
|
||||||
|
var Status_1 = require("./Status");
|
||||||
|
var Audio_1 = require("./Audio");
|
||||||
var PREFIX = '[Main]';
|
var PREFIX = '[Main]';
|
||||||
var Main = /** @class */ (function () {
|
var Main = /** @class */ (function () {
|
||||||
function Main() {
|
function Main() {
|
||||||
this.dataPath = (0, path_1.join)((0, os_1.homedir)(), 'MorphixProductions', 'NTSHControl');
|
this.dataPath = (0, path_1.join)((0, os_1.homedir)(), 'MorphixProductions', 'NTSHControl');
|
||||||
this.ConfigurationManager = new ConfigurationManager_1.ConfigurationManager(this);
|
this.ConfigurationManager = new ConfigurationManager_1.ConfigurationManager(this);
|
||||||
|
this.Timer = new Timer_1.Timer(this);
|
||||||
|
this.Status = new Status_1.Status(this);
|
||||||
this.WebServer = new WebServer_1.WebServer(this);
|
this.WebServer = new WebServer_1.WebServer(this);
|
||||||
this.Twilio = new Twilio_1.TwilioHandler(this);
|
this.Twilio = new Twilio_1.TwilioHandler(this);
|
||||||
|
this.Audio = new Audio_1.AudioChecker(this);
|
||||||
this.CameraRunner = new CameraRunner_1.CameraRunner(this);
|
this.CameraRunner = new CameraRunner_1.CameraRunner(this);
|
||||||
this.UnityRunner = new UnityRunner_1.UnityRunner(this);
|
this.UnityRunner = new UnityRunner_1.UnityRunner(this);
|
||||||
this.UnityWebSocket = new UnityWebSocket_1.UnityWebSocket(this);
|
this.UnityWebSocket = new UnityWebSocket_1.UnityWebSocket(this);
|
||||||
}
|
}
|
||||||
Main.prototype.start = function () {
|
Main.prototype.start = function () {
|
||||||
|
var _a, _b;
|
||||||
return __awaiter(this, void 0, void 0, function () {
|
return __awaiter(this, void 0, void 0, function () {
|
||||||
var _this = this;
|
var _this = this;
|
||||||
var _a;
|
return __generator(this, function (_c) {
|
||||||
return __generator(this, function (_b) {
|
switch (_c.label) {
|
||||||
switch (_b.label) {
|
|
||||||
case 0: return [4 /*yield*/, this.ConfigurationManager.load()];
|
case 0: return [4 /*yield*/, this.ConfigurationManager.load()];
|
||||||
case 1:
|
case 1:
|
||||||
_b.sent();
|
_c.sent();
|
||||||
return [4 /*yield*/, this.waitForRouter()];
|
return [4 /*yield*/, this.waitForRouter()];
|
||||||
case 2:
|
case 2:
|
||||||
_b.sent();
|
_c.sent();
|
||||||
return [4 /*yield*/, this.WebServer.listen()];
|
return [4 /*yield*/, this.WebServer.listen()];
|
||||||
case 3:
|
case 3:
|
||||||
_b.sent();
|
_c.sent();
|
||||||
return [4 /*yield*/, this.Twilio.load()];
|
return [4 /*yield*/, this.Twilio.load()];
|
||||||
case 4:
|
case 4:
|
||||||
_b.sent();
|
_c.sent();
|
||||||
return [4 /*yield*/, this.CameraRunner.connect()];
|
return [4 /*yield*/, this.Audio.waitForDevice()];
|
||||||
case 5:
|
case 5:
|
||||||
_b.sent();
|
_c.sent();
|
||||||
setTimeout(function () {
|
return [4 /*yield*/, this.CameraRunner.connect()];
|
||||||
_this.UnityRunner.start();
|
case 6:
|
||||||
}, (_a = this.Config.unity.executable.startUpDelay) !== null && _a !== void 0 ? _a : 0);
|
_c.sent();
|
||||||
|
return [4 /*yield*/, this.Timer.load()];
|
||||||
|
case 7:
|
||||||
|
_c.sent();
|
||||||
|
if (((_a = this.Config.unity.launchOnStartup) !== null && _a !== void 0 ? _a : true) === true)
|
||||||
|
setTimeout(function () {
|
||||||
|
_this.UnityRunner.start(UnityRunner_1.StartOrigin.Startup);
|
||||||
|
}, (_b = this.Config.unity.executable.startUpDelay) !== null && _b !== void 0 ? _b : 0);
|
||||||
|
else {
|
||||||
|
this.UnityRunner.setInfo('Not set to launch on startup. Waiting for timer or manual start...', null, 'STOPPED');
|
||||||
|
}
|
||||||
return [2 /*return*/];
|
return [2 /*return*/];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -123,7 +139,7 @@ var Main = /** @class */ (function () {
|
|||||||
case 3:
|
case 3:
|
||||||
_a.sent();
|
_a.sent();
|
||||||
console.log('Starting UnityRunner...');
|
console.log('Starting UnityRunner...');
|
||||||
return [4 /*yield*/, this.UnityRunner.start()];
|
return [4 /*yield*/, this.UnityRunner.start(this.UnityRunner.startOrigin)];
|
||||||
case 4:
|
case 4:
|
||||||
_a.sent();
|
_a.sent();
|
||||||
console.log('Restart complete.');
|
console.log('Restart complete.');
|
||||||
@@ -166,25 +182,27 @@ var Main = /** @class */ (function () {
|
|||||||
return new Promise(function (resolve) {
|
return new Promise(function (resolve) {
|
||||||
var check = function () {
|
var check = function () {
|
||||||
console.log(PREFIX, 'Waiting for router...');
|
console.log(PREFIX, 'Waiting for router...');
|
||||||
ping.sys.probe(_this.Config.router.ip, function (_a) { return __awaiter(_this, [_a], void 0, function (_b) {
|
ping.sys.probe(_this.Config.router.ip, function (_a) {
|
||||||
var alive = _b.alive;
|
var alive = _a.alive;
|
||||||
return __generator(this, function (_c) {
|
return __awaiter(_this, void 0, void 0, function () {
|
||||||
switch (_c.label) {
|
return __generator(this, function (_b) {
|
||||||
case 0:
|
switch (_b.label) {
|
||||||
if (!alive) return [3 /*break*/, 2];
|
case 0:
|
||||||
console.log(PREFIX, 'Router is online');
|
if (!alive) return [3 /*break*/, 2];
|
||||||
return [4 /*yield*/, (0, Utils_1.delay)(3000)];
|
console.log(PREFIX, 'Router is online');
|
||||||
case 1:
|
return [4 /*yield*/, (0, Utils_1.delay)(3000)];
|
||||||
_c.sent();
|
case 1:
|
||||||
return [2 /*return*/, resolve()];
|
_b.sent();
|
||||||
case 2: return [4 /*yield*/, (0, Utils_1.delay)(1000)];
|
return [2 /*return*/, resolve()];
|
||||||
case 3:
|
case 2: return [4 /*yield*/, (0, Utils_1.delay)(1000)];
|
||||||
_c.sent();
|
case 3:
|
||||||
check();
|
_b.sent();
|
||||||
return [2 /*return*/];
|
check();
|
||||||
}
|
return [2 /*return*/];
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}); });
|
});
|
||||||
};
|
};
|
||||||
check();
|
check();
|
||||||
});
|
});
|
||||||
|
|||||||
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":"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"}
|
{"version":3,"file":"Main.js","sourceRoot":"","sources":["../src/Main.ts"],"names":[],"mappings":"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"}
|
||||||
30
dist/Reboot.js
vendored
30
dist/Reboot.js
vendored
@@ -1,30 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.shutdown = shutdown;
|
|
||||||
var child_process_1 = require("child_process");
|
|
||||||
function shutdown() {
|
|
||||||
if (process.platform === 'win32') {
|
|
||||||
return shutdownWindows();
|
|
||||||
}
|
|
||||||
return Promise.resolve({
|
|
||||||
succeed: false,
|
|
||||||
message: 'Platform not supported',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function shutdownWindows() {
|
|
||||||
return new Promise(function (resolve, reject) {
|
|
||||||
(0, child_process_1.exec)('shutdown /s /t 5', function (error, stdout, stderr) {
|
|
||||||
if (error) {
|
|
||||||
console.error("Error shutting down Windows: ".concat(error.message));
|
|
||||||
return resolve({ succeed: false, message: error.message });
|
|
||||||
}
|
|
||||||
if (stderr) {
|
|
||||||
console.error("Error shutting down Windows: ".concat(stderr));
|
|
||||||
return resolve({ succeed: false, message: stderr });
|
|
||||||
}
|
|
||||||
console.log("Windows shutdown command executed: ".concat(stdout));
|
|
||||||
resolve({ succeed: true });
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=Reboot.js.map
|
|
||||||
1
dist/Reboot.js.map
vendored
1
dist/Reboot.js.map
vendored
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"Reboot.js","sourceRoot":"","sources":["../src/Reboot.ts"],"names":[],"mappings":";;AAEA,4BASC;AAXD,+CAAqC;AAErC,SAAgB,QAAQ;IACvB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,eAAe,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC;QACtB,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,wBAAwB;KACjC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe;IACvB,OAAO,IAAI,OAAO,CACjB,UAAC,OAAO,EAAE,MAAM;QACf,IAAA,oBAAI,EAAC,kBAAkB,EAAE,UAAC,KAAK,EAAE,MAAM,EAAE,MAAM;YAC9C,IAAI,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CACZ,uCAAgC,KAAK,CAAC,OAAO,CAAE,CAC/C,CAAC;gBACF,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,uCAAgC,MAAM,CAAE,CAAC,CAAC;gBACxD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,6CAAsC,MAAM,CAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACJ,CAAC,CACD,CAAC;AACH,CAAC"}
|
|
||||||
3
dist/Shutdown.js
vendored
3
dist/Shutdown.js
vendored
@@ -1,6 +1,6 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.shutdown = shutdown;
|
exports.shutdown = void 0;
|
||||||
var child_process_1 = require("child_process");
|
var child_process_1 = require("child_process");
|
||||||
function shutdown() {
|
function shutdown() {
|
||||||
if (process.platform === 'win32') {
|
if (process.platform === 'win32') {
|
||||||
@@ -11,6 +11,7 @@ function shutdown() {
|
|||||||
message: 'Platform not supported',
|
message: 'Platform not supported',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
exports.shutdown = shutdown;
|
||||||
function shutdownWindows() {
|
function shutdownWindows() {
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
(0, child_process_1.exec)('shutdown /s /t 5', function (error, stdout, stderr) {
|
(0, child_process_1.exec)('shutdown /s /t 5', function (error, stdout, stderr) {
|
||||||
|
|||||||
2
dist/Shutdown.js.map
vendored
2
dist/Shutdown.js.map
vendored
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"Shutdown.js","sourceRoot":"","sources":["../src/Shutdown.ts"],"names":[],"mappings":";;AAEA,4BASC;AAXD,+CAAqC;AAErC,SAAgB,QAAQ;IACvB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,eAAe,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC;QACtB,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,wBAAwB;KACjC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe;IACvB,OAAO,IAAI,OAAO,CACjB,UAAC,OAAO,EAAE,MAAM;QACf,IAAA,oBAAI,EAAC,kBAAkB,EAAE,UAAC,KAAK,EAAE,MAAM,EAAE,MAAM;YAC9C,IAAI,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CACZ,uCAAgC,KAAK,CAAC,OAAO,CAAE,CAC/C,CAAC;gBACF,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,uCAAgC,MAAM,CAAE,CAAC,CAAC;gBACxD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,6CAAsC,MAAM,CAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACJ,CAAC,CACD,CAAC;AACH,CAAC"}
|
{"version":3,"file":"Shutdown.js","sourceRoot":"","sources":["../src/Shutdown.ts"],"names":[],"mappings":";;;AAAA,+CAAqC;AAErC,SAAgB,QAAQ;IACvB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,eAAe,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC;QACtB,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,wBAAwB;KACjC,CAAC,CAAC;AACJ,CAAC;AATD,4BASC;AAED,SAAS,eAAe;IACvB,OAAO,IAAI,OAAO,CACjB,UAAC,OAAO,EAAE,MAAM;QACf,IAAA,oBAAI,EAAC,kBAAkB,EAAE,UAAC,KAAK,EAAE,MAAM,EAAE,MAAM;YAC9C,IAAI,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CACZ,uCAAgC,KAAK,CAAC,OAAO,CAAE,CAC/C,CAAC;gBACF,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,uCAAgC,MAAM,CAAE,CAAC,CAAC;gBACxD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,6CAAsC,MAAM,CAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACJ,CAAC,CACD,CAAC;AACH,CAAC"}
|
||||||
120
dist/Status.js
vendored
Normal file
120
dist/Status.js
vendored
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.StatusType = exports.State = exports.Status = void 0;
|
||||||
|
var UnityRunner_1 = require("./Unity/UnityRunner");
|
||||||
|
var Status = /** @class */ (function () {
|
||||||
|
function Status(Main) {
|
||||||
|
this.states = new Map();
|
||||||
|
this._Main = Main;
|
||||||
|
this.ensure();
|
||||||
|
this.startClock();
|
||||||
|
}
|
||||||
|
Status.prototype.update = function (type, state, message, buttons) {
|
||||||
|
this.states.set(type, { state: state, message: message, buttons: buttons });
|
||||||
|
this._Main.WebServer.socket.emit('status', this.getState());
|
||||||
|
};
|
||||||
|
Status.prototype.reboot = function (type) {
|
||||||
|
switch (type) {
|
||||||
|
case StatusType.CameraPC: {
|
||||||
|
this._Main.CameraRunner.sendCommand('reboot', function (response) {
|
||||||
|
console.log('CameraRunner reboot response:', response);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
case StatusType.CameraProcess: {
|
||||||
|
this._Main.CameraRunner.sendCommand('restart', function (response) {
|
||||||
|
console.log('CameraRunner restart response:', response);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
case StatusType.CameraUnityStream: {
|
||||||
|
this._Main.CameraRunner.sendCommand('restart', function (response) {
|
||||||
|
console.log('CameraRunner restart response:', response);
|
||||||
|
});
|
||||||
|
this._Main.UnityRunner.restart(UnityRunner_1.StartOrigin.Manual);
|
||||||
|
}
|
||||||
|
case StatusType.UnityBuild: {
|
||||||
|
this._Main.UnityRunner.restart(UnityRunner_1.StartOrigin.Manual);
|
||||||
|
}
|
||||||
|
case StatusType.ReplayFunction: {
|
||||||
|
console.log('ReplayFunction reboot requested. Not implemented.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Status.prototype.start = function (type) {
|
||||||
|
switch (type) {
|
||||||
|
case StatusType.UnityBuild: {
|
||||||
|
this._Main.UnityRunner.requestStart(UnityRunner_1.StartOrigin.Manual);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Status.prototype.stop = function (type) {
|
||||||
|
switch (type) {
|
||||||
|
case StatusType.UnityBuild: {
|
||||||
|
this._Main.UnityRunner.requestStop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Status.prototype.getState = function () {
|
||||||
|
var state = {};
|
||||||
|
this.states.forEach(function (value, key) {
|
||||||
|
state[key] = value;
|
||||||
|
});
|
||||||
|
return state;
|
||||||
|
};
|
||||||
|
Status.prototype.startClock = function () {
|
||||||
|
var _this = this;
|
||||||
|
var hadInvalidLastRound = false;
|
||||||
|
setInterval(function () {
|
||||||
|
var hasInvalid = false;
|
||||||
|
_this.states.forEach(function (state, key) {
|
||||||
|
if (state.state === State.Red)
|
||||||
|
hasInvalid = true;
|
||||||
|
});
|
||||||
|
if (hasInvalid && !hadInvalidLastRound) {
|
||||||
|
hadInvalidLastRound = true;
|
||||||
|
console.warn('One ore more status entries are invalid, waiting to see if they recover...');
|
||||||
|
}
|
||||||
|
else if (hasInvalid && hadInvalidLastRound) {
|
||||||
|
console.error('One ore more status entries are still invalid after 5 seconds, restarting system.');
|
||||||
|
_this._Main.Twilio.sendError('Status', 'One ore more status entries are still invalid after 5 seconds, restarting system.');
|
||||||
|
_this._Main.restart();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_this._Main.Twilio.sendError('Status', null);
|
||||||
|
hadInvalidLastRound = false;
|
||||||
|
}
|
||||||
|
}, 5000);
|
||||||
|
};
|
||||||
|
Status.prototype.ensure = function () {
|
||||||
|
for (var type in StatusType) {
|
||||||
|
if (!this.states.has(StatusType[type]))
|
||||||
|
this.states.set(StatusType[type], {
|
||||||
|
state: State.Gray,
|
||||||
|
message: 'Loading...',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Status.prototype.doLog = function () {
|
||||||
|
console.clear();
|
||||||
|
this.states.forEach(function (state, key) {
|
||||||
|
console.log("[".concat(key, "] ").concat(state.state, " - ").concat(state.message));
|
||||||
|
});
|
||||||
|
};
|
||||||
|
return Status;
|
||||||
|
}());
|
||||||
|
exports.Status = Status;
|
||||||
|
var State;
|
||||||
|
(function (State) {
|
||||||
|
State["Green"] = "GREEN";
|
||||||
|
State["Yellow"] = "YELLOW";
|
||||||
|
State["Red"] = "RED";
|
||||||
|
State["Gray"] = "GRAY";
|
||||||
|
})(State || (exports.State = State = {}));
|
||||||
|
var StatusType;
|
||||||
|
(function (StatusType) {
|
||||||
|
StatusType["CameraPC"] = "CAMERAPC";
|
||||||
|
StatusType["CameraProcess"] = "CAMERAPROCESS";
|
||||||
|
StatusType["CameraUnityStream"] = "CAMERAUNITYSTREAM";
|
||||||
|
StatusType["UnityBuild"] = "UNITYBUILD";
|
||||||
|
StatusType["ReplayFunction"] = "REPLAYFUNCTION";
|
||||||
|
})(StatusType || (exports.StatusType = StatusType = {}));
|
||||||
|
//# sourceMappingURL=Status.js.map
|
||||||
1
dist/Status.js.map
vendored
Normal file
1
dist/Status.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"Status.js","sourceRoot":"","sources":["../src/Status.ts"],"names":[],"mappings":";;;AACA,mDAAkD;AAGlD;IAKC,gBAAY,IAAU;QAFtB,WAAM,GAAiC,IAAI,GAAG,EAAE,CAAC;QAGhD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;IAED,uBAAM,GAAN,UACC,IAAgB,EAChB,KAAY,EACZ,OAAe,EACf,OAA+D;QAE/D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,OAAA,EAAE,OAAO,SAAA,EAAE,OAAO,SAAA,EAAE,CAAC,CAAC;QAEnD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,uBAAM,GAAN,UAAO,IAAgB;QACtB,QAAQ,IAAI,EAAE,CAAC;YACd,KAAK,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC1B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAClC,QAAQ,EACR,UAAC,QAAgD;oBAChD,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,QAAQ,CAAC,CAAC;gBACxD,CAAC,CACD,CAAC;YACH,CAAC;YACD,KAAK,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAClC,SAAS,EACT,UAAC,QAAgD;oBAChD,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,QAAQ,CAAC,CAAC;gBACzD,CAAC,CACD,CAAC;YACH,CAAC;YACD,KAAK,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBACnC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAClC,SAAS,EACT,UAAC,QAAgD;oBAChD,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,QAAQ,CAAC,CAAC;gBACzD,CAAC,CACD,CAAC;gBACF,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,yBAAW,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,KAAK,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,yBAAW,CAAC,MAAM,CAAC,CAAC;YACpD,CAAC;YACD,KAAK,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;gBAChC,OAAO,CAAC,GAAG,CACV,mDAAmD,CACnD,CAAC;YACH,CAAC;QACF,CAAC;IACF,CAAC;IAED,sBAAK,GAAL,UAAM,IAAgB;QACrB,QAAQ,IAAI,EAAE,CAAC;YACd,KAAK,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,yBAAW,CAAC,MAAM,CAAC,CAAC;YACzD,CAAC;QACF,CAAC;IACF,CAAC;IAED,qBAAI,GAAJ,UAAK,IAAgB;QACpB,QAAQ,IAAI,EAAE,CAAC;YACd,KAAK,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;YACtC,CAAC;QACF,CAAC;IACF,CAAC;IAED,yBAAQ,GAAR;QACC,IAAM,KAAK,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,GAAG;YAC9B,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACd,CAAC;IAEO,2BAAU,GAAlB;QAAA,iBA2BC;QA1BA,IAAI,mBAAmB,GAAY,KAAK,CAAC;QACzC,WAAW,CAAC;YACX,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,KAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,GAAG;gBAC9B,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG;oBAAE,UAAU,GAAG,IAAI,CAAC;YAClD,CAAC,CAAC,CAAC;YAEH,IAAI,UAAU,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACxC,mBAAmB,GAAG,IAAI,CAAC;gBAC3B,OAAO,CAAC,IAAI,CACX,4EAA4E,CAC5E,CAAC;YACH,CAAC;iBAAM,IAAI,UAAU,IAAI,mBAAmB,EAAE,CAAC;gBAC9C,OAAO,CAAC,KAAK,CACZ,mFAAmF,CACnF,CAAC;gBACF,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAC1B,QAAQ,EACR,mFAAmF,CACnF,CAAC;gBACF,KAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACP,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC5C,mBAAmB,GAAG,KAAK,CAAC;YAC7B,CAAC;QACF,CAAC,EAAE,IAAI,CAAC,CAAC;IACV,CAAC;IAEO,uBAAM,GAAd;QACC,KAAK,IAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;oBACjC,KAAK,EAAE,KAAK,CAAC,IAAI;oBACjB,OAAO,EAAE,YAAY;iBACrB,CAAC,CAAC;QACL,CAAC;IACF,CAAC;IAEO,sBAAK,GAAb;QACC,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,GAAG;YAC9B,OAAO,CAAC,GAAG,CAAC,WAAI,GAAG,eAAK,KAAK,CAAC,KAAK,gBAAM,KAAK,CAAC,OAAO,CAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACJ,CAAC;IACF,aAAC;AAAD,CAAC,AAlID,IAkIC;AAlIY,wBAAM;AA0InB,IAAY,KAKX;AALD,WAAY,KAAK;IAChB,wBAAe,CAAA;IACf,0BAAiB,CAAA;IACjB,oBAAW,CAAA;IACX,sBAAa,CAAA;AACd,CAAC,EALW,KAAK,qBAAL,KAAK,QAKhB;AAED,IAAY,UAMX;AAND,WAAY,UAAU;IACrB,mCAAqB,CAAA;IACrB,6CAA+B,CAAA;IAC/B,qDAAuC,CAAA;IACvC,uCAAyB,CAAA;IACzB,+CAAiC,CAAA;AAClC,CAAC,EANW,UAAU,0BAAV,UAAU,QAMrB"}
|
||||||
5
dist/Twilio.js
vendored
5
dist/Twilio.js
vendored
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
||||||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
||||||
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
||||||
function verb(n) { return function (v) { return step([n, v]); }; }
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
||||||
function step(op) {
|
function step(op) {
|
||||||
if (f) throw new TypeError("Generator is already executing.");
|
if (f) throw new TypeError("Generator is already executing.");
|
||||||
@@ -148,7 +148,6 @@ var TwilioHandler = /** @class */ (function () {
|
|||||||
};
|
};
|
||||||
TwilioHandler.prototype.sendMessage = function (to, message) {
|
TwilioHandler.prototype.sendMessage = function (to, message) {
|
||||||
var _this = this;
|
var _this = this;
|
||||||
return;
|
|
||||||
return new Promise(function (resolve) {
|
return new Promise(function (resolve) {
|
||||||
_this.client.messages
|
_this.client.messages
|
||||||
.create({
|
.create({
|
||||||
|
|||||||
2
dist/Twilio.js.map
vendored
2
dist/Twilio.js.map
vendored
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"Twilio.js","sourceRoot":"","sources":["../src/Twilio.ts"],"names":[],"mappings":"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"}
|
{"version":3,"file":"Twilio.js","sourceRoot":"","sources":["../src/Twilio.ts"],"names":[],"mappings":"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"}
|
||||||
214
dist/Unity/CameraRunner.js
vendored
214
dist/Unity/CameraRunner.js
vendored
@@ -1,214 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
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) {
|
|
||||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
||||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
||||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
||||||
});
|
|
||||||
};
|
|
||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
||||||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
||||||
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
||||||
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
||||||
function step(op) {
|
|
||||||
if (f) throw new TypeError("Generator is already executing.");
|
|
||||||
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
||||||
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
||||||
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
||||||
switch (op[0]) {
|
|
||||||
case 0: case 1: t = op; break;
|
|
||||||
case 4: _.label++; return { value: op[1], done: false };
|
|
||||||
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
||||||
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
||||||
default:
|
|
||||||
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
||||||
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
||||||
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
||||||
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
||||||
if (t[2]) _.ops.pop();
|
|
||||||
_.trys.pop(); continue;
|
|
||||||
}
|
|
||||||
op = body.call(thisArg, _);
|
|
||||||
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
||||||
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.CameraRunner = void 0;
|
|
||||||
var socket_io_client_1 = require("socket.io-client");
|
|
||||||
var Utils_1 = require("../Utils");
|
|
||||||
var PREFIX = "[CameraRunner]";
|
|
||||||
var CameraRunner = /** @class */ (function () {
|
|
||||||
function CameraRunner(Main) {
|
|
||||||
this.state = 'DISCONNECTED';
|
|
||||||
this.processStatus = {
|
|
||||||
state: 'STOPPED',
|
|
||||||
startTime: -1,
|
|
||||||
output: { current: [], last: [] },
|
|
||||||
};
|
|
||||||
this._Main = Main;
|
|
||||||
}
|
|
||||||
CameraRunner.prototype.handle = function (command) {
|
|
||||||
var args = [];
|
|
||||||
for (var _i = 1; _i < arguments.length; _i++) {
|
|
||||||
args[_i - 1] = arguments[_i];
|
|
||||||
}
|
|
||||||
switch (command) {
|
|
||||||
case 'restart':
|
|
||||||
case 'reboot':
|
|
||||||
var callback = args[0];
|
|
||||||
if (typeof callback !== 'function')
|
|
||||||
return;
|
|
||||||
this.sendCommand(command, callback);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
CameraRunner.prototype.sendCommand = function (command, callback) {
|
|
||||||
if (this.socket == null || !this.socket.connected)
|
|
||||||
return callback({
|
|
||||||
succeed: false,
|
|
||||||
message: 'Not connected to CameraRunner',
|
|
||||||
});
|
|
||||||
this.socket.emit(command, function (response) {
|
|
||||||
callback(response);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
CameraRunner.prototype.broadcastState = function () {
|
|
||||||
this._Main.WebServer.socket.emit('cameraRunnerState', this.getState());
|
|
||||||
};
|
|
||||||
CameraRunner.prototype.getState = function () {
|
|
||||||
return {
|
|
||||||
state: this.state,
|
|
||||||
message: this.message,
|
|
||||||
error: this.error,
|
|
||||||
processStatus: this.processStatus,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
CameraRunner.prototype.setInfo = function (message, error, state) {
|
|
||||||
if (state === void 0) { state = 'FAILED'; }
|
|
||||||
this.message = message;
|
|
||||||
this.error = error;
|
|
||||||
this.state = state;
|
|
||||||
this.broadcastState();
|
|
||||||
if (state == 'FAILED' || state == 'DISCONNECTED')
|
|
||||||
console.warn(PREFIX, message !== null && message !== void 0 ? message : error);
|
|
||||||
else
|
|
||||||
console.log(PREFIX, message !== null && message !== void 0 ? message : error);
|
|
||||||
};
|
|
||||||
CameraRunner.prototype.startPollClock = function () {
|
|
||||||
var _this = this;
|
|
||||||
var poll = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
||||||
var data;
|
|
||||||
var _this = this;
|
|
||||||
return __generator(this, function (_a) {
|
|
||||||
switch (_a.label) {
|
|
||||||
case 0: return [4 /*yield*/, new Promise(function (resolve) {
|
|
||||||
_this.socket.emit('getStatus', function (response) {
|
|
||||||
return resolve(response);
|
|
||||||
});
|
|
||||||
})];
|
|
||||||
case 1:
|
|
||||||
data = _a.sent();
|
|
||||||
this.processStatus = data;
|
|
||||||
this.broadcastState();
|
|
||||||
return [2 /*return*/];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}); };
|
|
||||||
this.socket.on('simpleStatus', function (simpleStatus) {
|
|
||||||
_this.processStatus.state = simpleStatus.state;
|
|
||||||
_this.processStatus.message = simpleStatus.message;
|
|
||||||
_this.processStatus.error = simpleStatus.error;
|
|
||||||
_this.broadcastState();
|
|
||||||
});
|
|
||||||
clearInterval(this.pollClock);
|
|
||||||
this.pollClock = setInterval(function () { return poll(); }, this._Main.Config.cameraRunner.pollInterval);
|
|
||||||
poll();
|
|
||||||
};
|
|
||||||
CameraRunner.prototype.reconnect = function () {
|
|
||||||
return __awaiter(this, void 0, void 0, function () {
|
|
||||||
return __generator(this, function (_a) {
|
|
||||||
switch (_a.label) {
|
|
||||||
case 0:
|
|
||||||
clearInterval(this.pollClock);
|
|
||||||
if (this.socket != null) {
|
|
||||||
this.socket.disconnect();
|
|
||||||
this.socket.close();
|
|
||||||
this.socket = null;
|
|
||||||
}
|
|
||||||
return [4 /*yield*/, (0, Utils_1.delay)(500)];
|
|
||||||
case 1:
|
|
||||||
_a.sent();
|
|
||||||
this.setInfo("Reconnecting to CameraRunner in 5 seconds...", null, 'CONNECTING');
|
|
||||||
return [4 /*yield*/, (0, Utils_1.delay)(5000)];
|
|
||||||
case 2:
|
|
||||||
_a.sent();
|
|
||||||
return [4 /*yield*/, this.connect()];
|
|
||||||
case 3:
|
|
||||||
_a.sent();
|
|
||||||
return [2 /*return*/];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
CameraRunner.prototype.connect = function () {
|
|
||||||
return __awaiter(this, void 0, void 0, function () {
|
|
||||||
var ip, port;
|
|
||||||
var _this = this;
|
|
||||||
return __generator(this, function (_a) {
|
|
||||||
switch (_a.label) {
|
|
||||||
case 0:
|
|
||||||
this.setInfo('Connecting to CameraRunner', null, 'CONNECTING');
|
|
||||||
return [4 /*yield*/, (0, Utils_1.delay)(1000)];
|
|
||||||
case 1:
|
|
||||||
_a.sent();
|
|
||||||
ip = this._Main.Config.cameraRunner.webSocket.ip;
|
|
||||||
port = this._Main.Config.cameraRunner.webSocket.port;
|
|
||||||
if (ip == null || port == null) {
|
|
||||||
return [2 /*return*/, this.setInfo('Connection problem', 'Camera Runner WebSocket IP or port is not configured.')];
|
|
||||||
}
|
|
||||||
this.socket = (0, socket_io_client_1.io)("ws://".concat(ip, ":").concat(port), {
|
|
||||||
reconnectionAttempts: 0,
|
|
||||||
reconnectionDelay: 2000,
|
|
||||||
});
|
|
||||||
this.socket.on('connect', function () {
|
|
||||||
_this.setInfo('Connected', null, 'CONNECTED');
|
|
||||||
_this.startPollClock();
|
|
||||||
});
|
|
||||||
this.socket.on('disconnect', function () {
|
|
||||||
_this.setInfo('Disconnected', null, 'DISCONNECTED');
|
|
||||||
_this.reconnect();
|
|
||||||
});
|
|
||||||
this.socket.on('reconnect', function () {
|
|
||||||
_this.setInfo('Connected (reconnection)', null, 'CONNECTED');
|
|
||||||
});
|
|
||||||
this.socket.on('connect_error', function (err) {
|
|
||||||
_this.setInfo('Connection problem', "Connection error: ".concat(err));
|
|
||||||
_this.reconnect();
|
|
||||||
});
|
|
||||||
this.socket.on('error', function (err) {
|
|
||||||
_this.setInfo('Connection problem', "Socket error: ".concat(err));
|
|
||||||
_this.reconnect();
|
|
||||||
});
|
|
||||||
this.socket.on('reconnect_attempt', function () {
|
|
||||||
_this.setInfo('Reconnecting', null, 'CONNECTING');
|
|
||||||
});
|
|
||||||
this.socket.on('reconnect_failed', function () {
|
|
||||||
_this.setInfo('Connection problem', 'Reconnection failed');
|
|
||||||
_this.reconnect();
|
|
||||||
});
|
|
||||||
this.socket.on('close', function () {
|
|
||||||
_this.setInfo('Disconnected', null, 'DISCONNECTED');
|
|
||||||
_this.reconnect();
|
|
||||||
});
|
|
||||||
return [2 /*return*/];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
return CameraRunner;
|
|
||||||
}());
|
|
||||||
exports.CameraRunner = CameraRunner;
|
|
||||||
//# sourceMappingURL=CameraRunner.js.map
|
|
||||||
1
dist/Unity/CameraRunner.js.map
vendored
1
dist/Unity/CameraRunner.js.map
vendored
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"CameraRunner.js","sourceRoot":"","sources":["../../src/Unity/CameraRunner.ts"],"names":[],"mappings":"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"}
|
|
||||||
117
dist/Unity/Unity.js
vendored
117
dist/Unity/Unity.js
vendored
@@ -1,117 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
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) {
|
|
||||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
||||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
||||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
||||||
});
|
|
||||||
};
|
|
||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
||||||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
||||||
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
||||||
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
||||||
function step(op) {
|
|
||||||
if (f) throw new TypeError("Generator is already executing.");
|
|
||||||
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
||||||
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
||||||
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
||||||
switch (op[0]) {
|
|
||||||
case 0: case 1: t = op; break;
|
|
||||||
case 4: _.label++; return { value: op[1], done: false };
|
|
||||||
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
||||||
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
||||||
default:
|
|
||||||
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
||||||
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
||||||
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
||||||
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
||||||
if (t[2]) _.ops.pop();
|
|
||||||
_.trys.pop(); continue;
|
|
||||||
}
|
|
||||||
op = body.call(thisArg, _);
|
|
||||||
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
||||||
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.Unity = void 0;
|
|
||||||
var ws_1 = require("ws");
|
|
||||||
var Utils_1 = require("../Utils");
|
|
||||||
var PREFIX = '[Unity]';
|
|
||||||
var Unity = /** @class */ (function () {
|
|
||||||
function Unity(Main) {
|
|
||||||
this.state = 'DISCONNECTED';
|
|
||||||
this.restartRequested = false;
|
|
||||||
this._Main = Main;
|
|
||||||
}
|
|
||||||
Unity.prototype.broadcastState = function () {
|
|
||||||
this._Main.WebServer.socket.emit('unityState', this.getState());
|
|
||||||
};
|
|
||||||
Unity.prototype.setInfo = function (message, error, state) {
|
|
||||||
if (state === void 0) { state = 'FAILED'; }
|
|
||||||
this.message = message;
|
|
||||||
this.error = error;
|
|
||||||
this.state = state;
|
|
||||||
this.broadcastState();
|
|
||||||
if (state == 'FAILED' || state == 'DISCONNECTED')
|
|
||||||
console.warn(PREFIX, message !== null && message !== void 0 ? message : error);
|
|
||||||
else
|
|
||||||
console.log(PREFIX, message !== null && message !== void 0 ? message : error);
|
|
||||||
};
|
|
||||||
Unity.prototype.reconnect = function () {
|
|
||||||
return __awaiter(this, void 0, void 0, function () {
|
|
||||||
return __generator(this, function (_a) {
|
|
||||||
switch (_a.label) {
|
|
||||||
case 0:
|
|
||||||
if (this.restartRequested)
|
|
||||||
return [2 /*return*/];
|
|
||||||
this.restartRequested = true;
|
|
||||||
if (this.socket != null) {
|
|
||||||
this.socket.close();
|
|
||||||
this.socket = null;
|
|
||||||
}
|
|
||||||
return [4 /*yield*/, (0, Utils_1.delay)(500)];
|
|
||||||
case 1:
|
|
||||||
_a.sent();
|
|
||||||
this.setInfo("Reconnecting to Unity in 5 seconds...", null, 'CONNECTING');
|
|
||||||
return [4 /*yield*/, (0, Utils_1.delay)(5000)];
|
|
||||||
case 2:
|
|
||||||
_a.sent();
|
|
||||||
return [4 /*yield*/, this.connect()];
|
|
||||||
case 3:
|
|
||||||
_a.sent();
|
|
||||||
return [2 /*return*/];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
Unity.prototype.connect = function () {
|
|
||||||
var _this = this;
|
|
||||||
var ws = new ws_1.WebSocket("ws://".concat(this._Main.Config.unity.webSocket.ip, ":").concat(this._Main.Config.unity.webSocket.port));
|
|
||||||
ws.on('error', function (error) {
|
|
||||||
_this.setInfo('Connection error', "Could not connect: ".concat(error.message), 'FAILED');
|
|
||||||
_this.reconnect();
|
|
||||||
});
|
|
||||||
ws.on('open', function () {
|
|
||||||
_this.setInfo('Connected', null, 'CONNECTED');
|
|
||||||
});
|
|
||||||
ws.on('close', function () {
|
|
||||||
if (_this.restartRequested)
|
|
||||||
return;
|
|
||||||
_this.setInfo('Disconnected', 'Unity was disconnected unexpectedly', 'DISCONNECTED');
|
|
||||||
_this.reconnect();
|
|
||||||
});
|
|
||||||
};
|
|
||||||
Unity.prototype.getState = function () {
|
|
||||||
return {
|
|
||||||
state: this.state,
|
|
||||||
message: this.message,
|
|
||||||
error: this.error,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
return Unity;
|
|
||||||
}());
|
|
||||||
exports.Unity = Unity;
|
|
||||||
//# sourceMappingURL=Unity.js.map
|
|
||||||
1
dist/Unity/Unity.js.map
vendored
1
dist/Unity/Unity.js.map
vendored
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"Unity.js","sourceRoot":"","sources":["../../src/Unity/Unity.ts"],"names":[],"mappings":"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"}
|
|
||||||
62
dist/Unity/UnityRunner.js
vendored
62
dist/Unity/UnityRunner.js
vendored
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
||||||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
||||||
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
||||||
function verb(n) { return function (v) { return step([n, v]); }; }
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
||||||
function step(op) {
|
function step(op) {
|
||||||
if (f) throw new TypeError("Generator is already executing.");
|
if (f) throw new TypeError("Generator is already executing.");
|
||||||
@@ -45,10 +45,11 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|||||||
return to.concat(ar || Array.prototype.slice.call(from));
|
return to.concat(ar || Array.prototype.slice.call(from));
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.UnityRunner = void 0;
|
exports.StartOrigin = exports.UnityBuildStateColors = exports.UnityRunner = void 0;
|
||||||
var fs_extra_1 = require("fs-extra");
|
var fs_extra_1 = require("fs-extra");
|
||||||
var child_process_1 = require("child_process");
|
var child_process_1 = require("child_process");
|
||||||
var Utils_1 = require("../Utils");
|
var Utils_1 = require("../Utils");
|
||||||
|
var Status_1 = require("../Status");
|
||||||
var PREFIX = '[UnityRunner]';
|
var PREFIX = '[UnityRunner]';
|
||||||
var LOG_OUTPUT = !process.argv.includes('--no-output-log');
|
var LOG_OUTPUT = !process.argv.includes('--no-output-log');
|
||||||
var UnityRunner = /** @class */ (function () {
|
var UnityRunner = /** @class */ (function () {
|
||||||
@@ -70,11 +71,11 @@ var UnityRunner = /** @class */ (function () {
|
|||||||
return;
|
return;
|
||||||
switch (command) {
|
switch (command) {
|
||||||
case 'restart':
|
case 'restart':
|
||||||
return callback(this.requestRestart());
|
return callback(this.requestRestart(StartOrigin.Manual));
|
||||||
case 'stop':
|
case 'stop':
|
||||||
return callback(this.requestStop());
|
return callback(this.requestStop());
|
||||||
case 'start':
|
case 'start':
|
||||||
return callback(this.requestStart());
|
return callback(this.requestStart(StartOrigin.Manual));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
UnityRunner.prototype.startStatusClock = function () {
|
UnityRunner.prototype.startStatusClock = function () {
|
||||||
@@ -84,13 +85,13 @@ var UnityRunner = /** @class */ (function () {
|
|||||||
_this.broadcastState();
|
_this.broadcastState();
|
||||||
}, 3000);
|
}, 3000);
|
||||||
};
|
};
|
||||||
UnityRunner.prototype.requestRestart = function () {
|
UnityRunner.prototype.requestRestart = function (startOrigin) {
|
||||||
if (this.state !== 'RUNNING')
|
if (this.state !== 'RUNNING')
|
||||||
return {
|
return {
|
||||||
succeed: false,
|
succeed: false,
|
||||||
message: 'Cannot restart when process is not running. It is probably restarting already.',
|
message: 'Cannot restart when process is not running. It is probably restarting already.',
|
||||||
};
|
};
|
||||||
this.restart(true);
|
this.restart(startOrigin, true);
|
||||||
return { succeed: true };
|
return { succeed: true };
|
||||||
};
|
};
|
||||||
UnityRunner.prototype.requestStop = function () {
|
UnityRunner.prototype.requestStop = function () {
|
||||||
@@ -102,23 +103,29 @@ var UnityRunner = /** @class */ (function () {
|
|||||||
this.stop();
|
this.stop();
|
||||||
return { succeed: true };
|
return { succeed: true };
|
||||||
};
|
};
|
||||||
UnityRunner.prototype.requestStart = function () {
|
UnityRunner.prototype.requestStart = function (startOrigin) {
|
||||||
if (this.state !== 'STOPPED')
|
if (this.state !== 'STOPPED')
|
||||||
return {
|
return {
|
||||||
succeed: false,
|
succeed: false,
|
||||||
message: 'Cannot start when process is already running.',
|
message: 'Cannot start when process is already running.',
|
||||||
};
|
};
|
||||||
this.start();
|
this.start(startOrigin);
|
||||||
return { succeed: true };
|
return { succeed: true };
|
||||||
};
|
};
|
||||||
UnityRunner.prototype.broadcastState = function () {
|
UnityRunner.prototype.broadcastState = function () {
|
||||||
this._Main.WebServer.socket.emit('unityRunnerState', this.getStatus());
|
this._Main.WebServer.socket.emit('unityRunnerState', this.getStatus());
|
||||||
};
|
};
|
||||||
UnityRunner.prototype.setInfo = function (message, error, state) {
|
UnityRunner.prototype.setInfo = function (message, error, state) {
|
||||||
|
var _a;
|
||||||
if (state === void 0) { state = 'PROBLEM'; }
|
if (state === void 0) { state = 'PROBLEM'; }
|
||||||
this.message = message;
|
this.message = message;
|
||||||
this.error = error;
|
this.error = error;
|
||||||
this.state = state;
|
this.state = state;
|
||||||
|
this._Main.Status.update(Status_1.StatusType.UnityBuild, exports.UnityBuildStateColors[state], (_a = message !== null && message !== void 0 ? message : error) !== null && _a !== void 0 ? _a : '', {
|
||||||
|
reboot: state === 'PROBLEM' || state === 'RUNNING',
|
||||||
|
start: state === 'STOPPED',
|
||||||
|
stop: state === 'RUNNING',
|
||||||
|
});
|
||||||
this.broadcastState();
|
this.broadcastState();
|
||||||
if (error != null)
|
if (error != null)
|
||||||
this._Main.Twilio.sendError('UnityRunner', error);
|
this._Main.Twilio.sendError('UnityRunner', error);
|
||||||
@@ -174,9 +181,9 @@ var UnityRunner = /** @class */ (function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
UnityRunner.prototype.restart = function () {
|
UnityRunner.prototype.restart = function (origin, instant) {
|
||||||
return __awaiter(this, arguments, void 0, function (instant) {
|
if (instant === void 0) { instant = false; }
|
||||||
if (instant === void 0) { instant = false; }
|
return __awaiter(this, void 0, void 0, function () {
|
||||||
return __generator(this, function (_a) {
|
return __generator(this, function (_a) {
|
||||||
switch (_a.label) {
|
switch (_a.label) {
|
||||||
case 0:
|
case 0:
|
||||||
@@ -186,6 +193,7 @@ var UnityRunner = /** @class */ (function () {
|
|||||||
this._Main.WebServer.Calibration.hasCalibrationImage = false;
|
this._Main.WebServer.Calibration.hasCalibrationImage = false;
|
||||||
clearInterval(this.statusClock);
|
clearInterval(this.statusClock);
|
||||||
this.startTime = -1;
|
this.startTime = -1;
|
||||||
|
this.startOrigin = null;
|
||||||
this.broadcastState();
|
this.broadcastState();
|
||||||
if (!!instant) return [3 /*break*/, 2];
|
if (!!instant) return [3 /*break*/, 2];
|
||||||
return [4 /*yield*/, (0, Utils_1.delay)(2000)];
|
return [4 /*yield*/, (0, Utils_1.delay)(2000)];
|
||||||
@@ -216,7 +224,7 @@ var UnityRunner = /** @class */ (function () {
|
|||||||
case 7:
|
case 7:
|
||||||
_a.sent();
|
_a.sent();
|
||||||
_a.label = 8;
|
_a.label = 8;
|
||||||
case 8: return [4 /*yield*/, this.start()];
|
case 8: return [4 /*yield*/, this.start(this.startOrigin)];
|
||||||
case 9:
|
case 9:
|
||||||
_a.sent();
|
_a.sent();
|
||||||
return [2 /*return*/];
|
return [2 /*return*/];
|
||||||
@@ -224,11 +232,11 @@ var UnityRunner = /** @class */ (function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
UnityRunner.prototype.start = function () {
|
UnityRunner.prototype.start = function (origin) {
|
||||||
|
var _a, _b, _c;
|
||||||
return __awaiter(this, void 0, void 0, function () {
|
return __awaiter(this, void 0, void 0, function () {
|
||||||
var path, fileName;
|
var path, fileName;
|
||||||
var _this = this;
|
var _this = this;
|
||||||
var _a, _b, _c;
|
|
||||||
return __generator(this, function (_d) {
|
return __generator(this, function (_d) {
|
||||||
switch (_d.label) {
|
switch (_d.label) {
|
||||||
case 0:
|
case 0:
|
||||||
@@ -285,11 +293,11 @@ var UnityRunner = /** @class */ (function () {
|
|||||||
if (_this.restartTriggered)
|
if (_this.restartTriggered)
|
||||||
return;
|
return;
|
||||||
_this.setInfo('Process exited', "Process exited with code ".concat(code, " and signal ").concat(signal), 'PROBLEM');
|
_this.setInfo('Process exited', "Process exited with code ".concat(code, " and signal ").concat(signal), 'PROBLEM');
|
||||||
_this.restart();
|
_this.restart(_this.startOrigin);
|
||||||
});
|
});
|
||||||
this.process.on('error', function (err) {
|
this.process.on('error', function (err) {
|
||||||
_this.setInfo('Process error', err.message);
|
_this.setInfo('Process error', err.message);
|
||||||
_this.restart();
|
_this.restart(_this.startOrigin);
|
||||||
});
|
});
|
||||||
(_b = this.process.stdout) === null || _b === void 0 ? void 0 : _b.on('data', function (data) {
|
(_b = this.process.stdout) === null || _b === void 0 ? void 0 : _b.on('data', function (data) {
|
||||||
var lines = data
|
var lines = data
|
||||||
@@ -317,6 +325,7 @@ var UnityRunner = /** @class */ (function () {
|
|||||||
_this.output.current.push(formattedLine);
|
_this.output.current.push(formattedLine);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
this.startOrigin = origin;
|
||||||
this.startStatusClock();
|
this.startStatusClock();
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
var _a, _b;
|
var _a, _b;
|
||||||
@@ -346,4 +355,23 @@ var UnityRunner = /** @class */ (function () {
|
|||||||
return UnityRunner;
|
return UnityRunner;
|
||||||
}());
|
}());
|
||||||
exports.UnityRunner = UnityRunner;
|
exports.UnityRunner = UnityRunner;
|
||||||
|
var State;
|
||||||
|
(function (State) {
|
||||||
|
State["Green"] = "GREEN";
|
||||||
|
State["Yellow"] = "YELLOW";
|
||||||
|
State["Red"] = "RED";
|
||||||
|
State["Gray"] = "GRAY";
|
||||||
|
})(State || (State = {}));
|
||||||
|
exports.UnityBuildStateColors = {
|
||||||
|
RUNNING: State.Green,
|
||||||
|
STOPPED: State.Gray,
|
||||||
|
STARTING: State.Yellow,
|
||||||
|
PROBLEM: State.Red,
|
||||||
|
};
|
||||||
|
var StartOrigin;
|
||||||
|
(function (StartOrigin) {
|
||||||
|
StartOrigin["Timer"] = "TIMER";
|
||||||
|
StartOrigin["Manual"] = "MANUAL";
|
||||||
|
StartOrigin["Startup"] = "STARTUP";
|
||||||
|
})(StartOrigin || (exports.StartOrigin = StartOrigin = {}));
|
||||||
//# sourceMappingURL=UnityRunner.js.map
|
//# sourceMappingURL=UnityRunner.js.map
|
||||||
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
36
dist/Unity/UnityWebSocket.js
vendored
36
dist/Unity/UnityWebSocket.js
vendored
@@ -20,8 +20,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
||||||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
||||||
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
||||||
function verb(n) { return function (v) { return step([n, v]); }; }
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
||||||
function step(op) {
|
function step(op) {
|
||||||
if (f) throw new TypeError("Generator is already executing.");
|
if (f) throw new TypeError("Generator is already executing.");
|
||||||
@@ -47,9 +47,10 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.UnityWebSocket = void 0;
|
exports.CameraUnityStateColors = exports.UnityWebSocket = void 0;
|
||||||
var ws_1 = require("ws");
|
var ws_1 = require("ws");
|
||||||
var Utils_1 = require("../Utils");
|
var Utils_1 = require("../Utils");
|
||||||
|
var Status_1 = require("../Status");
|
||||||
var PREFIX = '[Unity]';
|
var PREFIX = '[Unity]';
|
||||||
var UnityWebSocket = /** @class */ (function () {
|
var UnityWebSocket = /** @class */ (function () {
|
||||||
function UnityWebSocket(Main) {
|
function UnityWebSocket(Main) {
|
||||||
@@ -71,6 +72,7 @@ var UnityWebSocket = /** @class */ (function () {
|
|||||||
this.disconnected = false;
|
this.disconnected = false;
|
||||||
this.restartRequested = false;
|
this.restartRequested = false;
|
||||||
this._Main = Main;
|
this._Main = Main;
|
||||||
|
this.updateStatus();
|
||||||
}
|
}
|
||||||
UnityWebSocket.prototype.handle = function (command) {
|
UnityWebSocket.prototype.handle = function (command) {
|
||||||
var args = [];
|
var args = [];
|
||||||
@@ -150,11 +152,27 @@ var UnityWebSocket = /** @class */ (function () {
|
|||||||
UnityWebSocket.prototype.broadcastState = function () {
|
UnityWebSocket.prototype.broadcastState = function () {
|
||||||
this._Main.WebServer.socket.emit('unityWebSocketState', this.getState());
|
this._Main.WebServer.socket.emit('unityWebSocketState', this.getState());
|
||||||
};
|
};
|
||||||
|
UnityWebSocket.prototype.updateStatus = function () {
|
||||||
|
if (this.state != 'CONNECTED') {
|
||||||
|
this._Main.Status.update(Status_1.StatusType.CameraUnityStream, exports.CameraUnityStateColors[this.state], this.message, {
|
||||||
|
reboot: this.state === 'FAILED',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var status_1 = !this.parameters.zedReady
|
||||||
|
? 'Waiting for ZED stream'
|
||||||
|
: this.message;
|
||||||
|
this._Main.Status.update(Status_1.StatusType.CameraUnityStream, this.parameters.zedReady ? Status_1.State.Green : Status_1.State.Yellow, status_1, {
|
||||||
|
reboot: this.parameters.zedReady,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
UnityWebSocket.prototype.setInfo = function (message, error, state) {
|
UnityWebSocket.prototype.setInfo = function (message, error, state) {
|
||||||
if (state === void 0) { state = 'FAILED'; }
|
if (state === void 0) { state = 'FAILED'; }
|
||||||
this.message = message;
|
this.message = message;
|
||||||
this.error = error;
|
this.error = error;
|
||||||
this.state = state;
|
this.state = state;
|
||||||
|
this.updateStatus();
|
||||||
this.broadcastState();
|
this.broadcastState();
|
||||||
if (error != null)
|
if (error != null)
|
||||||
this._Main.Twilio.sendError('UnityWebSocket', error);
|
this._Main.Twilio.sendError('UnityWebSocket', error);
|
||||||
@@ -204,6 +222,7 @@ var UnityWebSocket = /** @class */ (function () {
|
|||||||
? 2
|
? 2
|
||||||
: null });
|
: null });
|
||||||
});
|
});
|
||||||
|
this.updateStatus();
|
||||||
this.broadcastState();
|
this.broadcastState();
|
||||||
break;
|
break;
|
||||||
case 'response_camera_frame':
|
case 'response_camera_frame':
|
||||||
@@ -302,7 +321,10 @@ var UnityWebSocket = /** @class */ (function () {
|
|||||||
};
|
};
|
||||||
UnityWebSocket.prototype.startFetchClocks = function () {
|
UnityWebSocket.prototype.startFetchClocks = function () {
|
||||||
var _this = this;
|
var _this = this;
|
||||||
this.socket.send(JSON.stringify({ type: 'set_heartbeat_auto_send', autoSend: false }));
|
this.socket.send(JSON.stringify({
|
||||||
|
type: 'set_heartbeat_auto_send',
|
||||||
|
autoSend: false,
|
||||||
|
}));
|
||||||
this.heartbeatClock = setInterval(function () {
|
this.heartbeatClock = setInterval(function () {
|
||||||
if (_this.socket == null ||
|
if (_this.socket == null ||
|
||||||
_this.socket.readyState !== ws_1.WebSocket.OPEN)
|
_this.socket.readyState !== ws_1.WebSocket.OPEN)
|
||||||
@@ -327,4 +349,10 @@ var UnityWebSocket = /** @class */ (function () {
|
|||||||
return UnityWebSocket;
|
return UnityWebSocket;
|
||||||
}());
|
}());
|
||||||
exports.UnityWebSocket = UnityWebSocket;
|
exports.UnityWebSocket = UnityWebSocket;
|
||||||
|
exports.CameraUnityStateColors = {
|
||||||
|
CONNECTED: Status_1.State.Green,
|
||||||
|
DISCONNECTED: Status_1.State.Gray,
|
||||||
|
CONNECTING: Status_1.State.Yellow,
|
||||||
|
FAILED: Status_1.State.Red,
|
||||||
|
};
|
||||||
//# sourceMappingURL=UnityWebSocket.js.map
|
//# sourceMappingURL=UnityWebSocket.js.map
|
||||||
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
207
dist/UnityRunner.js
vendored
207
dist/UnityRunner.js
vendored
@@ -1,207 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
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) {
|
|
||||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
||||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
||||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
||||||
});
|
|
||||||
};
|
|
||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
||||||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
||||||
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
||||||
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
||||||
function step(op) {
|
|
||||||
if (f) throw new TypeError("Generator is already executing.");
|
|
||||||
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
||||||
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
||||||
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
||||||
switch (op[0]) {
|
|
||||||
case 0: case 1: t = op; break;
|
|
||||||
case 4: _.label++; return { value: op[1], done: false };
|
|
||||||
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
||||||
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
||||||
default:
|
|
||||||
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
||||||
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
||||||
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
||||||
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
||||||
if (t[2]) _.ops.pop();
|
|
||||||
_.trys.pop(); continue;
|
|
||||||
}
|
|
||||||
op = body.call(thisArg, _);
|
|
||||||
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
||||||
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
||||||
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
||||||
if (ar || !(i in from)) {
|
|
||||||
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
||||||
ar[i] = from[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return to.concat(ar || Array.prototype.slice.call(from));
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.UnityRunner = void 0;
|
|
||||||
var fs_extra_1 = require("fs-extra");
|
|
||||||
var child_process_1 = require("child_process");
|
|
||||||
var Utils_1 = require("./Utils");
|
|
||||||
var PREFIX = '[UnityRunner]';
|
|
||||||
var LOG_OUTPUT = !process.argv.includes('--no-output-log');
|
|
||||||
var UnityRunner = /** @class */ (function () {
|
|
||||||
function UnityRunner(Main) {
|
|
||||||
this.state = 'STOPPED';
|
|
||||||
this.startTime = null;
|
|
||||||
this.output = { current: [], last: [] };
|
|
||||||
this.restartTriggered = false;
|
|
||||||
this._Main = Main;
|
|
||||||
}
|
|
||||||
UnityRunner.prototype.requestRestart = function () {
|
|
||||||
if (this.state !== 'RUNNING')
|
|
||||||
return {
|
|
||||||
succeed: false,
|
|
||||||
message: 'Cannot restart when process is not running. It is probably restarting already.',
|
|
||||||
};
|
|
||||||
this.restart(true);
|
|
||||||
return { succeed: true };
|
|
||||||
};
|
|
||||||
UnityRunner.prototype.broadcastState = function () {
|
|
||||||
this._Main.WebServer.socket.emit('unityRunnerState', this.getStatus());
|
|
||||||
};
|
|
||||||
UnityRunner.prototype.setInfo = function (message, error, state) {
|
|
||||||
if (state === void 0) { state = 'PROBLEM'; }
|
|
||||||
this.message = message;
|
|
||||||
this.error = error;
|
|
||||||
this.state = state;
|
|
||||||
this.broadcastState();
|
|
||||||
this.output.current.push("[".concat(new Date().toLocaleTimeString('nl-NL'), "] [System] [").concat(state, "] ").concat(message !== null && message !== void 0 ? message : error));
|
|
||||||
if (state == 'PROBLEM' || state == 'STOPPED')
|
|
||||||
console.warn(PREFIX, message !== null && message !== void 0 ? message : error);
|
|
||||||
else
|
|
||||||
console.log(PREFIX, message !== null && message !== void 0 ? message : error);
|
|
||||||
};
|
|
||||||
UnityRunner.prototype.restart = function () {
|
|
||||||
return __awaiter(this, arguments, void 0, function (instant) {
|
|
||||||
if (instant === void 0) { instant = false; }
|
|
||||||
return __generator(this, function (_a) {
|
|
||||||
switch (_a.label) {
|
|
||||||
case 0:
|
|
||||||
if (this.restartTriggered)
|
|
||||||
return [2 /*return*/];
|
|
||||||
if (this.output.current.length > 0) {
|
|
||||||
this.output.last = __spreadArray([], this.output.current, true);
|
|
||||||
this.output.current = [];
|
|
||||||
}
|
|
||||||
this.restartTriggered = true;
|
|
||||||
this.startTime = -1;
|
|
||||||
this.broadcastState();
|
|
||||||
if (instant)
|
|
||||||
this.setInfo('Process will restart shortly...', null, 'STOPPED');
|
|
||||||
if (!(this.process != null)) return [3 /*break*/, 2];
|
|
||||||
this.process.kill('SIGTERM');
|
|
||||||
return [4 /*yield*/, (0, Utils_1.delay)(3000)];
|
|
||||||
case 1:
|
|
||||||
_a.sent();
|
|
||||||
if (!this.process.killed && this.process.exitCode === null) {
|
|
||||||
this.process.kill('SIGKILL');
|
|
||||||
console.log(PREFIX, 'Sent SIGKILL to process.');
|
|
||||||
}
|
|
||||||
_a.label = 2;
|
|
||||||
case 2:
|
|
||||||
this.startTime = -1;
|
|
||||||
if (!!instant) return [3 /*break*/, 4];
|
|
||||||
this.setInfo("Restarting process in 5 seconds...", null, 'STOPPED');
|
|
||||||
return [4 /*yield*/, (0, Utils_1.delay)(5000)];
|
|
||||||
case 3:
|
|
||||||
_a.sent();
|
|
||||||
_a.label = 4;
|
|
||||||
case 4: return [4 /*yield*/, this.start()];
|
|
||||||
case 5:
|
|
||||||
_a.sent();
|
|
||||||
return [2 /*return*/];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
UnityRunner.prototype.start = function () {
|
|
||||||
var _this = this;
|
|
||||||
var _a, _b;
|
|
||||||
if (this.output.current.length > 0) {
|
|
||||||
this.output.last = __spreadArray([], this.output.current, true);
|
|
||||||
this.output.current = [];
|
|
||||||
}
|
|
||||||
this.startTime = Date.now();
|
|
||||||
this.restartTriggered = false;
|
|
||||||
this.broadcastState();
|
|
||||||
var path = this._Main.Config.unity.executable.path;
|
|
||||||
if (path == null || !(0, fs_extra_1.pathExistsSync)(path)) {
|
|
||||||
this.setInfo('Executable problem', "Executable path is not set or does not exist: ".concat(path));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var fileName = path.split(/(\/|\\)/).pop();
|
|
||||||
this.setInfo("Starting executable: ".concat(fileName), null, 'STARTING');
|
|
||||||
this.process = (0, child_process_1.spawn)(path, this._Main.Config.unity.executable.arguments, {
|
|
||||||
stdio: 'pipe',
|
|
||||||
});
|
|
||||||
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.restart();
|
|
||||||
});
|
|
||||||
this.process.on('error', function (err) {
|
|
||||||
_this.setInfo('Process error', err.message);
|
|
||||||
_this.restart();
|
|
||||||
});
|
|
||||||
(_a = this.process.stdout) === null || _a === void 0 ? void 0 : _a.on('data', function (data) {
|
|
||||||
var lines = data
|
|
||||||
.toString()
|
|
||||||
.trim()
|
|
||||||
.split('\n')
|
|
||||||
.filter(function (line) { return line.length > 0; });
|
|
||||||
lines.forEach(function (line) {
|
|
||||||
var formattedLine = "[".concat(new Date().toLocaleTimeString('nl-NL'), "] [").concat(fileName, "] ").concat(line);
|
|
||||||
if (LOG_OUTPUT)
|
|
||||||
console.log(PREFIX, formattedLine);
|
|
||||||
_this.output.current.push(formattedLine);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
(_b = this.process.stderr) === null || _b === void 0 ? void 0 : _b.on('data', function (data) {
|
|
||||||
var lines = data
|
|
||||||
.toString()
|
|
||||||
.trim()
|
|
||||||
.split('\n')
|
|
||||||
.filter(function (line) { return line.length > 0; });
|
|
||||||
lines.forEach(function (line) {
|
|
||||||
var formattedLine = "[".concat(new Date().toLocaleTimeString('nl-NL'), "] [").concat(fileName, "] [ERROR] ").concat(line);
|
|
||||||
if (LOG_OUTPUT)
|
|
||||||
console.error(PREFIX, formattedLine);
|
|
||||||
_this.output.current.push(formattedLine);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
setTimeout(function () {
|
|
||||||
var _a, _b;
|
|
||||||
if (_this.process == null ||
|
|
||||||
((_a = _this.process) === null || _a === void 0 ? void 0 : _a.killed) ||
|
|
||||||
((_b = _this.process) === null || _b === void 0 ? void 0 : _b.exitCode) != null ||
|
|
||||||
_this.restartTriggered)
|
|
||||||
return;
|
|
||||||
_this.setInfo('Running', '', 'RUNNING');
|
|
||||||
}, 5000);
|
|
||||||
};
|
|
||||||
UnityRunner.prototype.getStatus = function () {
|
|
||||||
return {
|
|
||||||
state: this.state,
|
|
||||||
message: this.message,
|
|
||||||
error: this.error,
|
|
||||||
startTime: this.startTime,
|
|
||||||
output: this.output,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
return UnityRunner;
|
|
||||||
}());
|
|
||||||
exports.UnityRunner = UnityRunner;
|
|
||||||
//# sourceMappingURL=UnityRunner.js.map
|
|
||||||
1
dist/UnityRunner.js.map
vendored
1
dist/UnityRunner.js.map
vendored
File diff suppressed because one or more lines are too long
3
dist/Utils.js
vendored
3
dist/Utils.js
vendored
@@ -1,7 +1,8 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.delay = delay;
|
exports.delay = void 0;
|
||||||
function delay(duration) {
|
function delay(duration) {
|
||||||
return new Promise(function (resolve) { return setTimeout(resolve, duration); });
|
return new Promise(function (resolve) { return setTimeout(resolve, duration); });
|
||||||
}
|
}
|
||||||
|
exports.delay = delay;
|
||||||
//# sourceMappingURL=Utils.js.map
|
//# sourceMappingURL=Utils.js.map
|
||||||
2
dist/Utils.js.map
vendored
2
dist/Utils.js.map
vendored
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../src/Utils.ts"],"names":[],"mappings":";;AAMA,sBAEC;AAFD,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":["../src/Utils.ts"],"names":[],"mappings":";;;AAMA,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;AAFD,sBAEC"}
|
||||||
31
dist/WebServer.js
vendored
31
dist/WebServer.js
vendored
@@ -1,31 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.WebServer = void 0;
|
|
||||||
var express = require("express");
|
|
||||||
var socket_io_1 = require("socket.io");
|
|
||||||
var http_1 = require("http");
|
|
||||||
var PREFIX = '[WebServer]';
|
|
||||||
var WebServer = /** @class */ (function () {
|
|
||||||
function WebServer(Main) {
|
|
||||||
this._Main = Main;
|
|
||||||
this.prepare();
|
|
||||||
}
|
|
||||||
WebServer.prototype.prepare = function () {
|
|
||||||
this.app = express();
|
|
||||||
this.httpServer = (0, http_1.createServer)(this.app);
|
|
||||||
this.socket = new socket_io_1.Server(this.httpServer);
|
|
||||||
};
|
|
||||||
WebServer.prototype.listen = function () {
|
|
||||||
var _this = this;
|
|
||||||
return new Promise(function (resolve) {
|
|
||||||
var port = _this._Main.Config.webServer.port;
|
|
||||||
_this.httpServer.listen(port, function () {
|
|
||||||
console.log(PREFIX, "Listening on port http://127.0.0.1:".concat(port));
|
|
||||||
resolve();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
return WebServer;
|
|
||||||
}());
|
|
||||||
exports.WebServer = WebServer;
|
|
||||||
//# sourceMappingURL=WebServer.js.map
|
|
||||||
1
dist/WebServer.js.map
vendored
1
dist/WebServer.js.map
vendored
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"WebServer.js","sourceRoot":"","sources":["../src/WebServer.ts"],"names":[],"mappings":";;;AACA,iCAAmC;AACnC,uCAAqD;AACrD,6BAA0D;AAG1D,IAAM,MAAM,GAAG,aAAa,CAAC;AAC7B;IAOC,mBAAY,IAAU;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAEO,2BAAO,GAAf;QACC,IAAI,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,IAAA,mBAAY,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,IAAI,kBAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC;IAED,0BAAM,GAAN;QAAA,iBAWC;QAVA,OAAO,IAAI,OAAO,CAAO,UAAC,OAAO;YAChC,IAAM,IAAI,GAAG,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;YAC9C,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE;gBAC5B,OAAO,CAAC,GAAG,CACV,MAAM,EACN,6CAAsC,IAAI,CAAE,CAC5C,CAAC;gBACF,OAAO,EAAE,CAAC;YACX,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC;IACF,gBAAC;AAAD,CAAC,AA/BD,IA+BC;AA/BY,8BAAS"}
|
|
||||||
4
dist/WebServer/CalibrationRouter.js
vendored
4
dist/WebServer/CalibrationRouter.js
vendored
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
||||||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
||||||
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
||||||
function verb(n) { return function (v) { return step([n, v]); }; }
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
||||||
function step(op) {
|
function step(op) {
|
||||||
if (f) throw new TypeError("Generator is already executing.");
|
if (f) throw new TypeError("Generator is already executing.");
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
||||||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
||||||
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
||||||
function verb(n) { return function (v) { return step([n, v]); }; }
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
||||||
function step(op) {
|
function step(op) {
|
||||||
if (f) throw new TypeError("Generator is already executing.");
|
if (f) throw new TypeError("Generator is already executing.");
|
||||||
@@ -36,22 +36,22 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.DashboardRouter = void 0;
|
exports.ControlRouter = void 0;
|
||||||
var express_1 = require("express");
|
var express_1 = require("express");
|
||||||
var path_1 = require("path");
|
var path_1 = require("path");
|
||||||
var fs_extra_1 = require("fs-extra");
|
var fs_extra_1 = require("fs-extra");
|
||||||
var DashboardRouter = /** @class */ (function () {
|
var ControlRouter = /** @class */ (function () {
|
||||||
function DashboardRouter(Main) {
|
function ControlRouter(Main) {
|
||||||
this._Main = Main;
|
this._Main = Main;
|
||||||
this.Router = (0, express_1.Router)();
|
this.Router = (0, express_1.Router)();
|
||||||
this.path = (0, path_1.join)(__filename, '..', '..', '..', 'frontend', 'views', 'dashboard');
|
this.path = (0, path_1.join)(__filename, '..', '..', '..', 'frontend', 'views', 'control');
|
||||||
this.registerRoutes();
|
this.registerRoutes();
|
||||||
}
|
}
|
||||||
DashboardRouter.prototype.registerRoutes = function () {
|
ControlRouter.prototype.registerRoutes = function () {
|
||||||
return __awaiter(this, void 0, void 0, function () {
|
return __awaiter(this, void 0, void 0, function () {
|
||||||
var _this = this;
|
var _this = this;
|
||||||
return __generator(this, function (_a) {
|
return __generator(this, function (_a) {
|
||||||
this.Router.get(['/', '/dashboard'], function (req, res) { return __awaiter(_this, void 0, void 0, function () {
|
this.Router.get('/', function (req, res) { return __awaiter(_this, void 0, void 0, function () {
|
||||||
var htmlContent;
|
var htmlContent;
|
||||||
return __generator(this, function (_a) {
|
return __generator(this, function (_a) {
|
||||||
switch (_a.label) {
|
switch (_a.label) {
|
||||||
@@ -94,7 +94,7 @@ var DashboardRouter = /** @class */ (function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
return DashboardRouter;
|
return ControlRouter;
|
||||||
}());
|
}());
|
||||||
exports.DashboardRouter = DashboardRouter;
|
exports.ControlRouter = ControlRouter;
|
||||||
//# sourceMappingURL=DahboardRouter.js.map
|
//# sourceMappingURL=ControlRouter.js.map
|
||||||
1
dist/WebServer/ControlRouter.js.map
vendored
Normal file
1
dist/WebServer/ControlRouter.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"ControlRouter.js","sourceRoot":"","sources":["../../src/WebServer/ControlRouter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAiC;AAEjC,6BAA4B;AAC5B,qCAAiE;AAEjE;IAMC,uBAAY,IAAU;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;QAEvB,IAAI,CAAC,IAAI,GAAG,IAAA,WAAI,EACf,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,OAAO,EACP,SAAS,CACT,CAAC;QAEF,IAAI,CAAC,cAAc,EAAE,CAAC;IACvB,CAAC;IAEK,sCAAc,GAApB;;;;gBACC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,UAAO,GAAG,EAAE,GAAG;;;;oCACf,qBAAM,IAAA,mBAAQ,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,EAAA;;gCAA3D,WAAW,GAAG,SAA6C;gCACjE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;gCAC3C,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;;;qBACtB,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,UAAO,GAAG,EAAE,GAAG;;;;oCACvB,qBAAM,IAAA,mBAAQ,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAA;;gCAA3D,YAAY,GAAG,SAA4C;gCACjE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;gCAC1C,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;;;qBACvB,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,UAAO,GAAG,EAAE,GAAG;;;;oCACtB,qBAAM,IAAA,mBAAQ,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAA;;gCAA5D,aAAa,GAAG,SAA4C;gCAClE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;gCACxD,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;;;qBACxB,CAAC,CAAC;;;;KACH;IACF,oBAAC;AAAD,CAAC,AAxCD,IAwCC;AAxCY,sCAAa"}
|
||||||
1
dist/WebServer/DahboardRouter.js.map
vendored
1
dist/WebServer/DahboardRouter.js.map
vendored
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"DahboardRouter.js","sourceRoot":"","sources":["../../src/WebServer/DahboardRouter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAiC;AAEjC,6BAA4B;AAC5B,qCAAiE;AAEjE;IAMC,yBAAY,IAAU;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;QAEvB,IAAI,CAAC,IAAI,GAAG,IAAA,WAAI,EACf,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,OAAO,EACP,WAAW,CACX,CAAC;QAEF,IAAI,CAAC,cAAc,EAAE,CAAC;IACvB,CAAC;IAEK,wCAAc,GAApB;;;;gBACC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,UAAO,GAAG,EAAE,GAAG;;;;oCAC/B,qBAAM,IAAA,mBAAQ,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,EAAA;;gCAA3D,WAAW,GAAG,SAA6C;gCACjE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;gCAC3C,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;;;qBACtB,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,UAAO,GAAG,EAAE,GAAG;;;;oCACvB,qBAAM,IAAA,mBAAQ,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAA;;gCAA3D,YAAY,GAAG,SAA4C;gCACjE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;gCAC1C,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;;;qBACvB,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,UAAO,GAAG,EAAE,GAAG;;;;oCACtB,qBAAM,IAAA,mBAAQ,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAA;;gCAA5D,aAAa,GAAG,SAA4C;gCAClE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;gCACxD,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;;;qBACxB,CAAC,CAAC;;;;KACH;IACF,sBAAC;AAAD,CAAC,AAxCD,IAwCC;AAxCY,0CAAe"}
|
|
||||||
10
dist/WebServer/DashboardRouter.js
vendored
10
dist/WebServer/DashboardRouter.js
vendored
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
||||||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
||||||
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
||||||
function verb(n) { return function (v) { return step([n, v]); }; }
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
||||||
function step(op) {
|
function step(op) {
|
||||||
if (f) throw new TypeError("Generator is already executing.");
|
if (f) throw new TypeError("Generator is already executing.");
|
||||||
@@ -51,7 +51,7 @@ var DashboardRouter = /** @class */ (function () {
|
|||||||
return __awaiter(this, void 0, void 0, function () {
|
return __awaiter(this, void 0, void 0, function () {
|
||||||
var _this = this;
|
var _this = this;
|
||||||
return __generator(this, function (_a) {
|
return __generator(this, function (_a) {
|
||||||
this.Router.get(['/', '/dashboard', '/calibration', '/cameralogs', '/unitylogs'], function (req, res) { return __awaiter(_this, void 0, void 0, function () {
|
this.Router.get(['/dashboard', '/calibration', '/cameralogs', '/unitylogs'], function (req, res) { return __awaiter(_this, void 0, void 0, function () {
|
||||||
var htmlContent;
|
var htmlContent;
|
||||||
return __generator(this, function (_a) {
|
return __generator(this, function (_a) {
|
||||||
switch (_a.label) {
|
switch (_a.label) {
|
||||||
@@ -64,7 +64,7 @@ var DashboardRouter = /** @class */ (function () {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}); });
|
}); });
|
||||||
this.Router.get('/style.css', function (req, res) { return __awaiter(_this, void 0, void 0, function () {
|
this.Router.get('/dashboard/style.css', function (req, res) { return __awaiter(_this, void 0, void 0, function () {
|
||||||
var styleContent;
|
var styleContent;
|
||||||
return __generator(this, function (_a) {
|
return __generator(this, function (_a) {
|
||||||
switch (_a.label) {
|
switch (_a.label) {
|
||||||
@@ -77,7 +77,7 @@ var DashboardRouter = /** @class */ (function () {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}); });
|
}); });
|
||||||
this.Router.get('/script.js', function (req, res) { return __awaiter(_this, void 0, void 0, function () {
|
this.Router.get('/dashboard/script.js', function (req, res) { return __awaiter(_this, void 0, void 0, function () {
|
||||||
var scriptContent;
|
var scriptContent;
|
||||||
return __generator(this, function (_a) {
|
return __generator(this, function (_a) {
|
||||||
switch (_a.label) {
|
switch (_a.label) {
|
||||||
|
|||||||
2
dist/WebServer/DashboardRouter.js.map
vendored
2
dist/WebServer/DashboardRouter.js.map
vendored
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"DashboardRouter.js","sourceRoot":"","sources":["../../src/WebServer/DashboardRouter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAiC;AAEjC,6BAA4B;AAC5B,qCAAiE;AAEjE;IAMC,yBAAY,IAAU;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;QAEvB,IAAI,CAAC,IAAI,GAAG,IAAA,WAAI,EACf,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,OAAO,EACP,WAAW,CACX,CAAC;QAEF,IAAI,CAAC,cAAc,EAAE,CAAC;IACvB,CAAC;IAEK,wCAAc,GAApB;;;;gBACC,IAAI,CAAC,MAAM,CAAC,GAAG,CACd,CAAC,GAAG,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,CAAC,EAChE,UAAO,GAAG,EAAE,GAAG;;;;oCACM,qBAAM,IAAA,mBAAQ,EACjC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAC7B,EAAA;;gCAFK,WAAW,GAAG,SAEnB;gCACD,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;gCAC3C,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;;;qBACtB,CACD,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,UAAO,GAAG,EAAE,GAAG;;;;oCACvB,qBAAM,IAAA,mBAAQ,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAA;;gCAA3D,YAAY,GAAG,SAA4C;gCACjE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;gCAC1C,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;;;qBACvB,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,UAAO,GAAG,EAAE,GAAG;;;;oCACtB,qBAAM,IAAA,mBAAQ,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAA;;gCAA5D,aAAa,GAAG,SAA4C;gCAClE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;gCACxD,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;;;qBACxB,CAAC,CAAC;;;;KACH;IACF,sBAAC;AAAD,CAAC,AA7CD,IA6CC;AA7CY,0CAAe"}
|
{"version":3,"file":"DashboardRouter.js","sourceRoot":"","sources":["../../src/WebServer/DashboardRouter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAiC;AAEjC,6BAA4B;AAC5B,qCAAiE;AAEjE;IAMC,yBAAY,IAAU;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;QAEvB,IAAI,CAAC,IAAI,GAAG,IAAA,WAAI,EACf,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,OAAO,EACP,WAAW,CACX,CAAC;QAEF,IAAI,CAAC,cAAc,EAAE,CAAC;IACvB,CAAC;IAEK,wCAAc,GAApB;;;;gBACC,IAAI,CAAC,MAAM,CAAC,GAAG,CACd,CAAC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,CAAC,EAC3D,UAAO,GAAG,EAAE,GAAG;;;;oCACM,qBAAM,IAAA,mBAAQ,EACjC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAC7B,EAAA;;gCAFK,WAAW,GAAG,SAEnB;gCACD,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;gCAC3C,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;;;qBACtB,CACD,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,UAAO,GAAG,EAAE,GAAG;;;;oCACjC,qBAAM,IAAA,mBAAQ,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAA;;gCAA3D,YAAY,GAAG,SAA4C;gCACjE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;gCAC1C,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;;;qBACvB,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,UAAO,GAAG,EAAE,GAAG;;;;oCAChC,qBAAM,IAAA,mBAAQ,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAA;;gCAA5D,aAAa,GAAG,SAA4C;gCAClE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;gCACxD,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;;;qBACxB,CAAC,CAAC;;;;KACH;IACF,sBAAC;AAAD,CAAC,AA7CD,IA6CC;AA7CY,0CAAe"}
|
||||||
27
dist/WebServer/WebServer.js
vendored
27
dist/WebServer/WebServer.js
vendored
@@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
||||||
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
||||||
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
||||||
function verb(n) { return function (v) { return step([n, v]); }; }
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
||||||
function step(op) {
|
function step(op) {
|
||||||
if (f) throw new TypeError("Generator is already executing.");
|
if (f) throw new TypeError("Generator is already executing.");
|
||||||
@@ -53,12 +53,14 @@ var DashboardRouter_1 = require("./DashboardRouter");
|
|||||||
var path_1 = require("path");
|
var path_1 = require("path");
|
||||||
var CalibrationRouter_1 = require("./CalibrationRouter");
|
var CalibrationRouter_1 = require("./CalibrationRouter");
|
||||||
var Utils_1 = require("../Utils");
|
var Utils_1 = require("../Utils");
|
||||||
|
var ControlRouter_1 = require("./ControlRouter");
|
||||||
var PREFIX = '[WebServer]';
|
var PREFIX = '[WebServer]';
|
||||||
var WebServer = /** @class */ (function () {
|
var WebServer = /** @class */ (function () {
|
||||||
function WebServer(Main) {
|
function WebServer(Main) {
|
||||||
this._Main = Main;
|
this._Main = Main;
|
||||||
this.Dashboard = new DashboardRouter_1.DashboardRouter(this._Main);
|
this.Dashboard = new DashboardRouter_1.DashboardRouter(this._Main);
|
||||||
this.Calibration = new CalibrationRouter_1.CalibrationRouter(this._Main);
|
this.Calibration = new CalibrationRouter_1.CalibrationRouter(this._Main);
|
||||||
|
this.Control = new ControlRouter_1.ControlRouter(this._Main);
|
||||||
this.prepare();
|
this.prepare();
|
||||||
}
|
}
|
||||||
WebServer.prototype.prepare = function () {
|
WebServer.prototype.prepare = function () {
|
||||||
@@ -68,8 +70,11 @@ var WebServer = /** @class */ (function () {
|
|||||||
this.socket = new socket_io_1.Server(this.httpServer);
|
this.socket = new socket_io_1.Server(this.httpServer);
|
||||||
this.app.use(express.static((0, path_1.join)(__filename, '..', '..', '..', 'frontend', 'static')));
|
this.app.use(express.static((0, path_1.join)(__filename, '..', '..', '..', 'frontend', 'static')));
|
||||||
this.app.use(this.Dashboard.Router);
|
this.app.use(this.Dashboard.Router);
|
||||||
|
this.app.use(this.Control.Router);
|
||||||
this.app.use(this.Calibration.Router);
|
this.app.use(this.Calibration.Router);
|
||||||
this.socket.on('connection', function (socket) {
|
this.socket.on('connection', function (socket) {
|
||||||
|
socket.emit('status', _this._Main.Status.getState());
|
||||||
|
socket.emit('timer', _this._Main.Timer.getState());
|
||||||
socket.emit('cameraRunnerState', _this._Main.CameraRunner.getState());
|
socket.emit('cameraRunnerState', _this._Main.CameraRunner.getState());
|
||||||
socket.emit('unityRunnerState', _this._Main.UnityRunner.getStatus());
|
socket.emit('unityRunnerState', _this._Main.UnityRunner.getStatus());
|
||||||
socket.emit('unityWebSocketState', _this._Main.UnityWebSocket.getState());
|
socket.emit('unityWebSocketState', _this._Main.UnityWebSocket.getState());
|
||||||
@@ -119,6 +124,24 @@ var WebServer = /** @class */ (function () {
|
|||||||
}
|
}
|
||||||
return (_a = _this._Main.UnityWebSocket).handle.apply(_a, __spreadArray([command], args, false));
|
return (_a = _this._Main.UnityWebSocket).handle.apply(_a, __spreadArray([command], args, false));
|
||||||
});
|
});
|
||||||
|
socket.on('status', function (action, type) {
|
||||||
|
switch (action) {
|
||||||
|
case 'fullreboot':
|
||||||
|
return _this._Main.restart();
|
||||||
|
case 'reboot':
|
||||||
|
return _this._Main.Status.reboot(type);
|
||||||
|
case 'start':
|
||||||
|
return _this._Main.Status.start(type);
|
||||||
|
case 'stop':
|
||||||
|
return _this._Main.Status.stop(type);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
socket.on('setTimerStart', function (data) {
|
||||||
|
_this._Main.Timer.setStart(data);
|
||||||
|
});
|
||||||
|
socket.on('setTimerEnd', function (data) {
|
||||||
|
_this._Main.Timer.setEnd(data);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
WebServer.prototype.listen = function () {
|
WebServer.prototype.listen = function () {
|
||||||
|
|||||||
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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"}
|
||||||
BIN
frontend/static/font/RidleyGrotesk-Bold.otf
Normal file
BIN
frontend/static/font/RidleyGrotesk-Bold.otf
Normal file
Binary file not shown.
BIN
frontend/static/font/RidleyGrotesk-Regular.otf
Normal file
BIN
frontend/static/font/RidleyGrotesk-Regular.otf
Normal file
Binary file not shown.
BIN
frontend/static/font/Roboto-Italic-VariableFont_wdth,wght.ttf
Normal file
BIN
frontend/static/font/Roboto-Italic-VariableFont_wdth,wght.ttf
Normal file
Binary file not shown.
BIN
frontend/static/font/Roboto-VariableFont_wdth,wght.ttf
Normal file
BIN
frontend/static/font/Roboto-VariableFont_wdth,wght.ttf
Normal file
Binary file not shown.
BIN
frontend/static/font/ScothBrace.ttf
Normal file
BIN
frontend/static/font/ScothBrace.ttf
Normal file
Binary file not shown.
BIN
frontend/static/img/call.png
Normal file
BIN
frontend/static/img/call.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
BIN
frontend/static/img/logo.png
Normal file
BIN
frontend/static/img/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 57 KiB |
39
frontend/views/control/dist/calibration.js
vendored
Normal file
39
frontend/views/control/dist/calibration.js
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.Calibration = void 0;
|
||||||
|
var Calibration = /** @class */ (function () {
|
||||||
|
function Calibration(Main) {
|
||||||
|
this.visible = false;
|
||||||
|
this.container = document.querySelector('.ntsh-calibration');
|
||||||
|
this.image = this.container.querySelector('img');
|
||||||
|
this._Main = Main;
|
||||||
|
this.registerListeners();
|
||||||
|
this.startClock();
|
||||||
|
}
|
||||||
|
Calibration.prototype.startClock = function () {
|
||||||
|
var _this = this;
|
||||||
|
setInterval(function () {
|
||||||
|
if (_this.visible && _this.image)
|
||||||
|
_this.image.src = "/calibrationImage?t=".concat(Date.now());
|
||||||
|
}, 1000);
|
||||||
|
};
|
||||||
|
Calibration.prototype.registerListeners = function () {
|
||||||
|
var _this = this;
|
||||||
|
this.observer = new IntersectionObserver(function (entries) {
|
||||||
|
entries.forEach(function (entry) {
|
||||||
|
if (entry.isIntersecting) {
|
||||||
|
_this.visible = true;
|
||||||
|
console.log('Calibration visible');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_this.visible = false;
|
||||||
|
console.log('Calibration not visible');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
this.observer.observe(this.container);
|
||||||
|
};
|
||||||
|
return Calibration;
|
||||||
|
}());
|
||||||
|
exports.Calibration = Calibration;
|
||||||
|
//# sourceMappingURL=calibration.js.map
|
||||||
1
frontend/views/control/dist/calibration.js.map
vendored
Normal file
1
frontend/views/control/dist/calibration.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"calibration.js","sourceRoot":"","sources":["../ts/calibration.ts"],"names":[],"mappings":";;;AAEA;IASC,qBAAY,IAAU;QALtB,YAAO,GAAY,KAAK,CAAC;QAEzB,cAAS,GAAmB,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;QACxE,UAAK,GAAqB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAG7D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;IAEO,gCAAU,GAAlB;QAAA,iBAKC;QAJA,WAAW,CAAC;YACX,IAAI,KAAI,CAAC,OAAO,IAAI,KAAI,CAAC,KAAK;gBAC7B,KAAI,CAAC,KAAK,CAAC,GAAG,GAAG,8BAAuB,IAAI,CAAC,GAAG,EAAE,CAAE,CAAC;QACvD,CAAC,EAAE,IAAI,CAAC,CAAC;IACV,CAAC;IAEO,uCAAiB,GAAzB;QAAA,iBAaC;QAZA,IAAI,CAAC,QAAQ,GAAG,IAAI,oBAAoB,CAAC,UAAC,OAAO;YAChD,OAAO,CAAC,OAAO,CAAC,UAAC,KAAK;gBACrB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;oBAC1B,KAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBACpB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;gBACpC,CAAC;qBAAM,CAAC;oBACP,KAAI,CAAC,OAAO,GAAG,KAAK,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;gBACxC,CAAC;YACF,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IACF,kBAAC;AAAD,CAAC,AAtCD,IAsCC;AAtCY,kCAAW"}
|
||||||
96
frontend/views/control/dist/checklist.js
vendored
Normal file
96
frontend/views/control/dist/checklist.js
vendored
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.Checklist = void 0;
|
||||||
|
var morphux_1 = require("morphux");
|
||||||
|
var Checklist = /** @class */ (function () {
|
||||||
|
function Checklist(Main) {
|
||||||
|
this.Rows = {
|
||||||
|
CAMERAPC: document.querySelector(".ntsh-checklist-row[status=\"CAMERAPC\"]"),
|
||||||
|
CAMERAPROCESS: document.querySelector(".ntsh-checklist-row[status=\"CAMERAPROCESS\"]"),
|
||||||
|
CAMERAUNITYSTREAM: document.querySelector(".ntsh-checklist-row[status=\"CAMERAUNITYSTREAM\"]"),
|
||||||
|
UNITYBUILD: document.querySelector(".ntsh-checklist-row[status=\"UNITYBUILD\"]"),
|
||||||
|
REPLAYFUNCTION: document.querySelector(".ntsh-checklist-row[status=\"REPLAYFUNCTION\"]"),
|
||||||
|
};
|
||||||
|
this.FullReboot = document.querySelector('.ntsh-fullreboot-button');
|
||||||
|
this._Main = Main;
|
||||||
|
this.registerListeners();
|
||||||
|
}
|
||||||
|
Checklist.prototype.update = function (status) {
|
||||||
|
this.updateRow(this.Rows.CAMERAPC, status.CAMERAPC);
|
||||||
|
this.updateRow(this.Rows.CAMERAPROCESS, status.CAMERAPROCESS);
|
||||||
|
this.updateRow(this.Rows.CAMERAUNITYSTREAM, status.CAMERAUNITYSTREAM);
|
||||||
|
this.updateRow(this.Rows.UNITYBUILD, status.UNITYBUILD);
|
||||||
|
this.updateRow(this.Rows.REPLAYFUNCTION, status.REPLAYFUNCTION);
|
||||||
|
console.log('Updated checklist:', status);
|
||||||
|
};
|
||||||
|
Checklist.prototype.updateRow = function (row, state) {
|
||||||
|
var _a, _b, _c;
|
||||||
|
var status = row.querySelector('.ntsh-checklist-row-status');
|
||||||
|
var message = row.querySelector('p');
|
||||||
|
var startButton = row.querySelector('.ntsh-checklist-row-button.start');
|
||||||
|
var stopButton = row.querySelector('.ntsh-checklist-row-button.stop');
|
||||||
|
var rebootButton = row.querySelector('.ntsh-checklist-row-button.reboot');
|
||||||
|
status.classList.remove('RED', 'GREEN', 'YELLOW', 'GRAY');
|
||||||
|
status.classList.add(state.state);
|
||||||
|
message.innerText = state.message;
|
||||||
|
startButton.style.display = ((_a = state.buttons) === null || _a === void 0 ? void 0 : _a.start) ? 'block' : 'none';
|
||||||
|
stopButton.style.display = ((_b = state.buttons) === null || _b === void 0 ? void 0 : _b.stop) ? 'block' : 'none';
|
||||||
|
rebootButton.style.display = ((_c = state.buttons) === null || _c === void 0 ? void 0 : _c.reboot) ? 'block' : 'none';
|
||||||
|
};
|
||||||
|
Checklist.prototype.registerListeners = function () {
|
||||||
|
var _this = this;
|
||||||
|
this.FullReboot.onclick = function () {
|
||||||
|
morphux_1.MorphFeature.Confirm({
|
||||||
|
title: 'Full Reboot',
|
||||||
|
message: 'Are you sure you want to perform a full reboot?',
|
||||||
|
}, function (state) {
|
||||||
|
if (!state)
|
||||||
|
return;
|
||||||
|
_this._Main.socket.emit('status', 'fullreboot');
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var _loop_1 = function (key) {
|
||||||
|
var row = this_1.Rows[key];
|
||||||
|
var startButton = row.querySelector('.ntsh-checklist-row-button.start');
|
||||||
|
startButton.onclick = function () {
|
||||||
|
return morphux_1.MorphFeature.Confirm({
|
||||||
|
title: 'Start',
|
||||||
|
message: 'Are you sure you want to start?',
|
||||||
|
}, function (state) {
|
||||||
|
if (!state)
|
||||||
|
return;
|
||||||
|
_this._Main.socket.emit('status', 'start', key);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var stopButton = row.querySelector('.ntsh-checklist-row-button.stop');
|
||||||
|
stopButton.onclick = function () {
|
||||||
|
return morphux_1.MorphFeature.Confirm({
|
||||||
|
title: 'Stop',
|
||||||
|
message: 'Are you sure you want to stop?',
|
||||||
|
}, function (state) {
|
||||||
|
if (!state)
|
||||||
|
return;
|
||||||
|
_this._Main.socket.emit('status', 'stop', key);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var rebootButton = row.querySelector('.ntsh-checklist-row-button.reboot');
|
||||||
|
rebootButton.onclick = function () {
|
||||||
|
return morphux_1.MorphFeature.Confirm({
|
||||||
|
title: 'Reboot',
|
||||||
|
message: 'Are you sure you want to reboot?',
|
||||||
|
}, function (state) {
|
||||||
|
if (!state)
|
||||||
|
return;
|
||||||
|
_this._Main.socket.emit('status', 'reboot', key);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
};
|
||||||
|
var this_1 = this;
|
||||||
|
for (var key in this.Rows) {
|
||||||
|
_loop_1(key);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return Checklist;
|
||||||
|
}());
|
||||||
|
exports.Checklist = Checklist;
|
||||||
|
//# sourceMappingURL=checklist.js.map
|
||||||
1
frontend/views/control/dist/checklist.js.map
vendored
Normal file
1
frontend/views/control/dist/checklist.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"checklist.js","sourceRoot":"","sources":["../ts/checklist.ts"],"names":[],"mappings":"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"}
|
||||||
144
frontend/views/control/dist/main.js
vendored
Normal file
144
frontend/views/control/dist/main.js
vendored
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
"use strict";
|
||||||
|
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) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
||||||
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
||||||
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
||||||
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
||||||
|
function step(op) {
|
||||||
|
if (f) throw new TypeError("Generator is already executing.");
|
||||||
|
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
||||||
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
||||||
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
||||||
|
switch (op[0]) {
|
||||||
|
case 0: case 1: t = op; break;
|
||||||
|
case 4: _.label++; return { value: op[1], done: false };
|
||||||
|
case 5: _.label++; y = op[1]; op = [0]; continue;
|
||||||
|
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
||||||
|
default:
|
||||||
|
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
||||||
|
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
||||||
|
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
||||||
|
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
||||||
|
if (t[2]) _.ops.pop();
|
||||||
|
_.trys.pop(); continue;
|
||||||
|
}
|
||||||
|
op = body.call(thisArg, _);
|
||||||
|
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
||||||
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.Main = void 0;
|
||||||
|
var socket_io_client_1 = require("socket.io-client");
|
||||||
|
var menu_1 = require("./menu");
|
||||||
|
var checklist_1 = require("./checklist");
|
||||||
|
var calibration_1 = require("./calibration");
|
||||||
|
var morphux_1 = require("morphux");
|
||||||
|
var outOfServiceMode_1 = require("./outOfServiceMode");
|
||||||
|
var timer_1 = require("./timer");
|
||||||
|
var socket = (0, socket_io_client_1.io)('/');
|
||||||
|
var Main = /** @class */ (function () {
|
||||||
|
function Main() {
|
||||||
|
this.Menu = new menu_1.Menu();
|
||||||
|
this.CheckList = new checklist_1.Checklist(this);
|
||||||
|
this.Calibration = new calibration_1.Calibration(this);
|
||||||
|
this.OutOfServiceMode = new outOfServiceMode_1.OutOfServiceMode(this);
|
||||||
|
this.Timer = new timer_1.Timer(this);
|
||||||
|
this.socket = socket;
|
||||||
|
this.supportButton = document.querySelector('.ntsh-support img');
|
||||||
|
this.supportNumber = '';
|
||||||
|
this.registerListeners();
|
||||||
|
}
|
||||||
|
Main.prototype.registerListeners = function () {
|
||||||
|
var _this = this;
|
||||||
|
this.supportButton.onclick = function () { return _this.showSupport(); };
|
||||||
|
socket.on('status', function (data) {
|
||||||
|
_this.CheckList.update(data);
|
||||||
|
});
|
||||||
|
socket.on('supportNumber', function (number) {
|
||||||
|
_this.supportNumber = number;
|
||||||
|
});
|
||||||
|
socket.on('unityWebSocketState', function (state) {
|
||||||
|
var _a, _b, _c, _d;
|
||||||
|
_this.OutOfServiceMode.input.checked =
|
||||||
|
(_b = (_a = state === null || state === void 0 ? void 0 : state.parameters) === null || _a === void 0 ? void 0 : _a.outOfService) !== null && _b !== void 0 ? _b : false;
|
||||||
|
_this.OutOfServiceMode.state =
|
||||||
|
(_d = (_c = state === null || state === void 0 ? void 0 : state.parameters) === null || _c === void 0 ? void 0 : _c.outOfService) !== null && _d !== void 0 ? _d : false;
|
||||||
|
});
|
||||||
|
socket.on('timer', function (data) {
|
||||||
|
_this.Timer.update(data);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
Main.prototype.executeCommand = function (command, message, type) {
|
||||||
|
if (type === void 0) { type = 'unityRunner'; }
|
||||||
|
return __awaiter(this, void 0, void 0, function () {
|
||||||
|
var _this = this;
|
||||||
|
return __generator(this, function (_a) {
|
||||||
|
return [2 /*return*/, new Promise(function (resolve) { 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: 'Are you sure?',
|
||||||
|
message: message,
|
||||||
|
})];
|
||||||
|
case 1:
|
||||||
|
confirmed = _a.sent();
|
||||||
|
if (!confirmed)
|
||||||
|
return [2 /*return*/, resolve(false)];
|
||||||
|
morphux_1.MorphFeature.Loader({
|
||||||
|
active: true,
|
||||||
|
message: "Dispatching command...",
|
||||||
|
});
|
||||||
|
socket.emit(type, command, function (response) {
|
||||||
|
morphux_1.MorphFeature.Loader({ active: false });
|
||||||
|
if (!response.succeed)
|
||||||
|
return morphux_1.MorphFeature.Alert({
|
||||||
|
title: 'Error',
|
||||||
|
message: response.message,
|
||||||
|
});
|
||||||
|
morphux_1.MorphFeature.Notification({
|
||||||
|
level: 'success',
|
||||||
|
message: "Dispatched command",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
resolve(true);
|
||||||
|
return [2 /*return*/];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}); })];
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
Main.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*/];
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
return Main;
|
||||||
|
}());
|
||||||
|
exports.Main = Main;
|
||||||
|
var _Main = new Main();
|
||||||
|
//# sourceMappingURL=main.js.map
|
||||||
1
frontend/views/control/dist/main.js.map
vendored
Normal file
1
frontend/views/control/dist/main.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"main.js","sourceRoot":"","sources":["../ts/main.ts"],"names":[],"mappings":"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"}
|
||||||
46
frontend/views/control/dist/menu.js
vendored
Normal file
46
frontend/views/control/dist/menu.js
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.Menu = void 0;
|
||||||
|
var Menu = /** @class */ (function () {
|
||||||
|
function Menu() {
|
||||||
|
this.menuContainer = document.querySelector('.ntsh_menubar');
|
||||||
|
this.tabContainer = document.querySelector('.ntsh_tabs');
|
||||||
|
this.registerListeners();
|
||||||
|
if (window.location.search.includes('advanced'))
|
||||||
|
this.selectTab('advanced');
|
||||||
|
}
|
||||||
|
Menu.prototype.selectTab = function (tabId) {
|
||||||
|
this.menuContainer
|
||||||
|
.querySelectorAll('.ntsh_menubar-item')
|
||||||
|
.forEach(function (item) {
|
||||||
|
if (item.getAttribute('tabid') === tabId) {
|
||||||
|
item.classList.add('selected');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
item.classList.remove('selected');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.tabContainer.querySelectorAll('.ntsh_tab').forEach(function (tab) {
|
||||||
|
if (tab.getAttribute('tabid') === tabId) {
|
||||||
|
tab.classList.add('visible');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tab.classList.remove('visible');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
Menu.prototype.registerListeners = function () {
|
||||||
|
var _this = this;
|
||||||
|
this.menuContainer
|
||||||
|
.querySelectorAll('.ntsh_menubar-item')
|
||||||
|
.forEach(function (item) {
|
||||||
|
item.addEventListener('click', function () {
|
||||||
|
var itemId = item.getAttribute('tabid');
|
||||||
|
_this.selectTab(itemId);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
return Menu;
|
||||||
|
}());
|
||||||
|
exports.Menu = Menu;
|
||||||
|
//# sourceMappingURL=menu.js.map
|
||||||
1
frontend/views/control/dist/menu.js.map
vendored
Normal file
1
frontend/views/control/dist/menu.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"menu.js","sourceRoot":"","sources":["../ts/menu.ts"],"names":[],"mappings":";;;AAAA;IAIC;QAHA,kBAAa,GAAmB,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QACxE,iBAAY,GAAmB,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAGnE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC7B,CAAC;IAED,wBAAS,GAAT,UAAU,KAAa;QACtB,IAAI,CAAC,aAAa;aAChB,gBAAgB,CAAC,oBAAoB,CAAC;aACtC,OAAO,CAAC,UAAC,IAAI;YACb,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC1C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACnC,CAAC;QACF,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;YAC3D,IAAI,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC;gBACzC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACP,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACjC,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,gCAAiB,GAAzB;QAAA,iBASC;QARA,IAAI,CAAC,aAAa;aAChB,gBAAgB,CAAC,oBAAoB,CAAC;aACtC,OAAO,CAAC,UAAC,IAAI;YACb,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;gBAC9B,IAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAC1C,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACF,WAAC;AAAD,CAAC,AAzCD,IAyCC;AAzCY,oBAAI"}
|
||||||
67
frontend/views/control/dist/outOfServiceMode.js
vendored
Normal file
67
frontend/views/control/dist/outOfServiceMode.js
vendored
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
"use strict";
|
||||||
|
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) {
|
||||||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
||||||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
||||||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
||||||
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
||||||
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
||||||
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
||||||
|
function step(op) {
|
||||||
|
if (f) throw new TypeError("Generator is already executing.");
|
||||||
|
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
||||||
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
||||||
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
||||||
|
switch (op[0]) {
|
||||||
|
case 0: case 1: t = op; break;
|
||||||
|
case 4: _.label++; return { value: op[1], done: false };
|
||||||
|
case 5: _.label++; y = op[1]; op = [0]; continue;
|
||||||
|
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
||||||
|
default:
|
||||||
|
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
||||||
|
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
||||||
|
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
||||||
|
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
||||||
|
if (t[2]) _.ops.pop();
|
||||||
|
_.trys.pop(); continue;
|
||||||
|
}
|
||||||
|
op = body.call(thisArg, _);
|
||||||
|
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
||||||
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.OutOfServiceMode = void 0;
|
||||||
|
var OutOfServiceMode = /** @class */ (function () {
|
||||||
|
function OutOfServiceMode(Main) {
|
||||||
|
this.state = false;
|
||||||
|
this.input = document.querySelector('.ntsh-outofservicemode-input');
|
||||||
|
this._Main = Main;
|
||||||
|
this.registerListeners();
|
||||||
|
}
|
||||||
|
OutOfServiceMode.prototype.registerListeners = function () {
|
||||||
|
var _this = this;
|
||||||
|
this.input.addEventListener('change', function () { return __awaiter(_this, void 0, void 0, function () {
|
||||||
|
var valid;
|
||||||
|
return __generator(this, function (_a) {
|
||||||
|
switch (_a.label) {
|
||||||
|
case 0: return [4 /*yield*/, this._Main.executeCommand(this.state ? 'disableOutOfService' : 'enableOutOfService', "Are you sure you want to set the installation to \"".concat(this.state ? 'Out of Service' : 'Operational', "\"?"), 'unityWebSocket')];
|
||||||
|
case 1:
|
||||||
|
valid = _a.sent();
|
||||||
|
if (!valid)
|
||||||
|
this.input.checked = this.state;
|
||||||
|
this.state = this.input.checked;
|
||||||
|
return [2 /*return*/];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}); });
|
||||||
|
};
|
||||||
|
return OutOfServiceMode;
|
||||||
|
}());
|
||||||
|
exports.OutOfServiceMode = OutOfServiceMode;
|
||||||
|
//# sourceMappingURL=outOfServiceMode.js.map
|
||||||
1
frontend/views/control/dist/outOfServiceMode.js.map
vendored
Normal file
1
frontend/views/control/dist/outOfServiceMode.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"outOfServiceMode.js","sourceRoot":"","sources":["../ts/outOfServiceMode.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;IAQC,0BAAY,IAAU;QALtB,UAAK,GAAY,KAAK,CAAC;QACvB,UAAK,GAAqB,QAAQ,CAAC,aAAa,CAC/C,8BAA8B,CAC9B,CAAC;QAGD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAEO,4CAAiB,GAAzB;QAAA,iBAUC;QATA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE;;;;4BACvB,qBAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAC5C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,oBAAoB,EACzD,6DAAqD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,QAAI,EACtG,gBAAgB,CAChB,EAAA;;wBAJK,KAAK,GAAG,SAIb;wBACD,IAAI,CAAC,KAAK;4BAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;wBAC5C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;;;;aAChC,CAAC,CAAC;IACJ,CAAC;IACF,uBAAC;AAAD,CAAC,AAzBD,IAyBC;AAzBY,4CAAgB"}
|
||||||
31
frontend/views/control/dist/timer.js
vendored
Normal file
31
frontend/views/control/dist/timer.js
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.Timer = void 0;
|
||||||
|
var Timer = /** @class */ (function () {
|
||||||
|
function Timer(Main) {
|
||||||
|
this.startup = document.querySelector('.ntsh-timer-startup');
|
||||||
|
this.shutdown = document.querySelector('.ntsh-timer-shutdown');
|
||||||
|
this._Main = Main;
|
||||||
|
this.registerListeners();
|
||||||
|
}
|
||||||
|
Timer.prototype.update = function (data) {
|
||||||
|
var start = "".concat(data.start.hour.toString().padStart(2, '0'), ":").concat(data.start.minute.toString().padStart(2, '0'));
|
||||||
|
var end = "".concat(data.end.hour.toString().padStart(2, '0'), ":").concat(data.end.minute.toString().padStart(2, '0'));
|
||||||
|
this.startup.value = start;
|
||||||
|
this.shutdown.value = end;
|
||||||
|
};
|
||||||
|
Timer.prototype.registerListeners = function () {
|
||||||
|
var _this = this;
|
||||||
|
this.startup.onchange = function () {
|
||||||
|
var _a = _this.startup.value.split(':').map(Number), hour = _a[0], minute = _a[1];
|
||||||
|
_this._Main.socket.emit('setTimerStart', { hour: hour, minute: minute });
|
||||||
|
};
|
||||||
|
this.shutdown.onchange = function () {
|
||||||
|
var _a = _this.shutdown.value.split(':').map(Number), hour = _a[0], minute = _a[1];
|
||||||
|
_this._Main.socket.emit('setTimerEnd', { hour: hour, minute: minute });
|
||||||
|
};
|
||||||
|
};
|
||||||
|
return Timer;
|
||||||
|
}());
|
||||||
|
exports.Timer = Timer;
|
||||||
|
//# sourceMappingURL=timer.js.map
|
||||||
1
frontend/views/control/dist/timer.js.map
vendored
Normal file
1
frontend/views/control/dist/timer.js.map
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"timer.js","sourceRoot":"","sources":["../ts/timer.ts"],"names":[],"mappings":";;;AAEA;IAMC,eAAY,IAAU;QAHtB,YAAO,GAAqB,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;QAC1E,aAAQ,GAAqB,QAAQ,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;QAG3E,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAED,sBAAM,GAAN,UAAO,IAGN;QACA,IAAM,KAAK,GAAG,UAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,cAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC;QAChH,IAAM,GAAG,GAAG,UAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,cAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC;QAE1G,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC;IAC3B,CAAC;IAED,iCAAiB,GAAjB;QAAA,iBASC;QARA,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG;YACjB,IAAA,KAAiB,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAzD,IAAI,QAAA,EAAE,MAAM,QAA6C,CAAC;YACjE,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,MAAA,EAAE,MAAM,QAAA,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG;YAClB,IAAA,KAAiB,KAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAA1D,IAAI,QAAA,EAAE,MAAM,QAA8C,CAAC;YAClE,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,MAAA,EAAE,MAAM,QAAA,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC;IACH,CAAC;IACF,YAAC;AAAD,CAAC,AAjCD,IAiCC;AAjCY,sBAAK"}
|
||||||
284
frontend/views/control/index.html
Normal file
284
frontend/views/control/index.html
Normal file
@@ -0,0 +1,284 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>NTSH Control</title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/material-symbols/index.css">
|
||||||
|
<link rel="stylesheet" href="./style.css">
|
||||||
|
<script defer src="./script.js" defer></script>
|
||||||
|
|
||||||
|
<link rel="icon" type="image/png" sizes="32x32" href="/img/cloud_thick.png">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="ntsh">
|
||||||
|
<div class="ntsh-wrapper">
|
||||||
|
<div class="ntsh-inlay">
|
||||||
|
<div class="ntsh-topbar">
|
||||||
|
<div class="ntsh_menubar">
|
||||||
|
<div class="ntsh_menubar-item selected" tabid="home">
|
||||||
|
HOME
|
||||||
|
</div>
|
||||||
|
<div class="ntsh_menubar-item" tabid="advanced">
|
||||||
|
ADVANCED
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<img src="/img/logo.png">
|
||||||
|
|
||||||
|
<div class="ntsh-separator"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ntsh_tabs">
|
||||||
|
<div class="ntsh_tab visible" tabid="home">
|
||||||
|
<h2>1. SYSTEM CHECKLIST</h2>
|
||||||
|
<h3>
|
||||||
|
Check if all lights are green.
|
||||||
|
<br>
|
||||||
|
If not? Reboot!
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<div class="ntsh-checklist">
|
||||||
|
<div class="ntsh-checklist-row" status="CAMERAPC">
|
||||||
|
<div class="ntsh-checklist-row-status"></div>
|
||||||
|
|
||||||
|
<div class="ntsh-checklist-row-text">
|
||||||
|
<h4>CAMERA PC</h4>
|
||||||
|
<p>Status...</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ntsh-checklist-row-buttons">
|
||||||
|
<div class="ntsh-checklist-row-button start">
|
||||||
|
START
|
||||||
|
</div>
|
||||||
|
<div class="ntsh-checklist-row-button stop">
|
||||||
|
STOP
|
||||||
|
</div>
|
||||||
|
<div class="ntsh-checklist-row-button reboot">
|
||||||
|
REBOOT
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ntsh-checklist-row" status="CAMERAPROCESS">
|
||||||
|
<div class="ntsh-checklist-row-status"></div>
|
||||||
|
|
||||||
|
<div class="ntsh-checklist-row-text">
|
||||||
|
<h4>CAMERA PROCESS</h4>
|
||||||
|
<p>Status...</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ntsh-checklist-row-buttons">
|
||||||
|
<div class="ntsh-checklist-row-button start">
|
||||||
|
START
|
||||||
|
</div>
|
||||||
|
<div class="ntsh-checklist-row-button stop">
|
||||||
|
STOP
|
||||||
|
</div>
|
||||||
|
<div class="ntsh-checklist-row-button reboot">
|
||||||
|
REBOOT
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ntsh-checklist-row" status="CAMERAUNITYSTREAM">
|
||||||
|
<div class="ntsh-checklist-row-status"></div>
|
||||||
|
|
||||||
|
<div class="ntsh-checklist-row-text">
|
||||||
|
<h4>CAMERA/UNITY STREAM</h4>
|
||||||
|
<p>Status...</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ntsh-checklist-row-buttons">
|
||||||
|
<div class="ntsh-checklist-row-button start">
|
||||||
|
START
|
||||||
|
</div>
|
||||||
|
<div class="ntsh-checklist-row-button stop">
|
||||||
|
STOP
|
||||||
|
</div>
|
||||||
|
<div class="ntsh-checklist-row-button reboot">
|
||||||
|
REBOOT
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ntsh-checklist-row" status="UNITYBUILD">
|
||||||
|
<div class="ntsh-checklist-row-status"></div>
|
||||||
|
|
||||||
|
<div class="ntsh-checklist-row-text">
|
||||||
|
<h4>UNITY BUILD</h4>
|
||||||
|
<p>Status...</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ntsh-checklist-row-buttons">
|
||||||
|
<div class="ntsh-checklist-row-button start">
|
||||||
|
START
|
||||||
|
</div>
|
||||||
|
<div class="ntsh-checklist-row-button stop">
|
||||||
|
STOP
|
||||||
|
</div>
|
||||||
|
<div class="ntsh-checklist-row-button reboot">
|
||||||
|
REBOOT
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ntsh-checklist-row" status="REPLAYFUNCTION">
|
||||||
|
<div class="ntsh-checklist-row-status"></div>
|
||||||
|
|
||||||
|
<div class="ntsh-checklist-row-text">
|
||||||
|
<h4>REPLAY FUNCTION</h4>
|
||||||
|
<p>Status...</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ntsh-checklist-row-buttons">
|
||||||
|
<div class="ntsh-checklist-row-button start">
|
||||||
|
START
|
||||||
|
</div>
|
||||||
|
<div class="ntsh-checklist-row-button stop">
|
||||||
|
STOP
|
||||||
|
</div>
|
||||||
|
<div class="ntsh-checklist-row-button reboot">
|
||||||
|
REBOOT
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ntsh-fullreboot">
|
||||||
|
<div class="ntsh-fullreboot-button">
|
||||||
|
FULL REBOOT
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ntsh-support">
|
||||||
|
<p>If reboot doesn't help:</p>
|
||||||
|
<img src="/img/call.png">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ntsh-separator"></div>
|
||||||
|
<h2>2. CALIBRATION CHECK</h2>
|
||||||
|
<h3>
|
||||||
|
Look if the top plate of the installation precisely aligns with the pink rectangle.
|
||||||
|
<br>
|
||||||
|
If not? Reposition the physical installation.
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<div class="ntsh-calibration">
|
||||||
|
<img src="/calibrationImage">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h1 style="margin-bottom:30px;">Thank you for checking! :)</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ntsh_tab" tabid="advanced">
|
||||||
|
<h2>OUT OF SERVICE MODE</h2>
|
||||||
|
<h3>Display the 'out of service' message and mute the sound.</h3>
|
||||||
|
<div class="ntsh-outofservicemode">
|
||||||
|
<h4>OUT OF SERVICE MODE</h4>
|
||||||
|
|
||||||
|
<label class="switch">
|
||||||
|
<input type="checkbox" class="ntsh-outofservicemode-input">
|
||||||
|
<span class="slider round"></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ntsh-separator"></div>
|
||||||
|
|
||||||
|
<h2>SET TIMER</h2>
|
||||||
|
<h3>Please set timer in order to schedule the daily reboot.</h3>
|
||||||
|
<br>
|
||||||
|
<h3>Advise: fill in 30 minutes before opening and 30 minutes after closing of exhibition.</h3>
|
||||||
|
|
||||||
|
<div class="ntsh-timer">
|
||||||
|
<div class="ntsh-timer-row">
|
||||||
|
<h4>Start up</h4>
|
||||||
|
|
||||||
|
<input type="time" class="ntsh-timer-startup">
|
||||||
|
</div>
|
||||||
|
<div class="ntsh-timer-row">
|
||||||
|
<h4>Shut down</h4>
|
||||||
|
|
||||||
|
<input type="time" class="ntsh-timer-shutdown">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ntsh-separator"></div>
|
||||||
|
|
||||||
|
<h2>COLOR SETTINGS</h2>
|
||||||
|
<h3>If lighting at the exhibition location changes during the day (for example in daylight)</h3>
|
||||||
|
|
||||||
|
<div class="ntsh-autolighting">
|
||||||
|
<h4>AUTO LIGHTING</h4>
|
||||||
|
|
||||||
|
<label class="switch">
|
||||||
|
<input type="checkbox">
|
||||||
|
<span class="slider round"></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="ntsh_lightingsettings-container disabled">
|
||||||
|
<h3>FIXED LIGHTING SETTINGS</h3>
|
||||||
|
<div class="ntsh_lightingsettings">
|
||||||
|
<div class="ntsh_lightingsettings-row">
|
||||||
|
<h4>Brightness</h4>
|
||||||
|
|
||||||
|
<input type="range" min="-100" max="100" value="0">
|
||||||
|
</div>
|
||||||
|
<div class="ntsh_lightingsettings-row">
|
||||||
|
<h4>Gain</h4>
|
||||||
|
|
||||||
|
<input type="range" min="-100" max="100" value="0">
|
||||||
|
</div>
|
||||||
|
<div class="ntsh_lightingsettings-row">
|
||||||
|
<h4>White Balance</h4>
|
||||||
|
|
||||||
|
<input type="range" min="-100" max="100" value="0">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ntsh-separator"></div>
|
||||||
|
|
||||||
|
<h2>SOUND SETTINGS</h2>
|
||||||
|
<h3>Adjust sound settings according to acoustics of location. (Take in account changes during
|
||||||
|
the
|
||||||
|
day and adjust to an average.)</h3>
|
||||||
|
|
||||||
|
<div class="ntsh_soundsettings disabled">
|
||||||
|
<div class="ntsh_soundsettings-row">
|
||||||
|
<h4>Volume</h4>
|
||||||
|
|
||||||
|
<input type="range" min="0" max="100" value="0">
|
||||||
|
</div>
|
||||||
|
<div class="ntsh_soundsettings-row">
|
||||||
|
<h4>EQ low</h4>
|
||||||
|
|
||||||
|
<input type="range" min="-100" max="100" value="0">
|
||||||
|
</div>
|
||||||
|
<div class="ntsh_soundsettings-row">
|
||||||
|
<h4>EQ mid</h4>
|
||||||
|
|
||||||
|
<input type="range" min="-100" max="100" value="0">
|
||||||
|
</div>
|
||||||
|
<div class="ntsh_soundsettings-row">
|
||||||
|
<h4>EQ high</h4>
|
||||||
|
|
||||||
|
<input type="range" min="-100" max="100" value="0">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ntsh_soundsettings-resetcontainer">
|
||||||
|
<div class="ntsh_soundsettings-reset">
|
||||||
|
RESET
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
919
frontend/views/control/package-lock.json
generated
Normal file
919
frontend/views/control/package-lock.json
generated
Normal file
@@ -0,0 +1,919 @@
|
|||||||
|
{
|
||||||
|
"name": "control",
|
||||||
|
"lockfileVersion": 3,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"@rollup/plugin-commonjs": "^25.0.7",
|
||||||
|
"@rollup/plugin-json": "^6.1.0",
|
||||||
|
"@rollup/plugin-node-resolve": "^15.1.0",
|
||||||
|
"@types/node": "^20.12.8",
|
||||||
|
"ansi_up": "^6.0.6",
|
||||||
|
"material-symbols": "^0.17.4",
|
||||||
|
"morphux": "file:../../../../MorphUX",
|
||||||
|
"rollup": "^2.79.1",
|
||||||
|
"rollup-plugin-terser": "^7.0.2",
|
||||||
|
"socket.io-client": "^4.8.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/sortablejs": "^1.15.8",
|
||||||
|
"dts-bundle-generator": "^9.5.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"../../../../MorphUX": {
|
||||||
|
"name": "morphux",
|
||||||
|
"version": "2026.3.1",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"@egjs/hammerjs": "^2.0.17",
|
||||||
|
"@rollup/plugin-commonjs": "^25.0.7",
|
||||||
|
"@rollup/plugin-json": "^6.1.0",
|
||||||
|
"@rollup/plugin-node-resolve": "^15.1.0",
|
||||||
|
"@types/node": "^20.12.8",
|
||||||
|
"material-symbols": "^0.17.4",
|
||||||
|
"rollup": "^2.79.1",
|
||||||
|
"rollup-plugin-terser": "^7.0.2",
|
||||||
|
"sortablejs": "^1.2.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/sortablejs": "^1.15.8",
|
||||||
|
"dts-bundle-generator": "^9.5.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@babel/code-frame": {
|
||||||
|
"version": "7.29.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
|
||||||
|
"integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/helper-validator-identifier": "^7.28.5",
|
||||||
|
"js-tokens": "^4.0.0",
|
||||||
|
"picocolors": "^1.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@babel/helper-validator-identifier": {
|
||||||
|
"version": "7.28.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
|
||||||
|
"integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@jridgewell/gen-mapping": {
|
||||||
|
"version": "0.3.13",
|
||||||
|
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
|
||||||
|
"integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
|
||||||
|
"dependencies": {
|
||||||
|
"@jridgewell/sourcemap-codec": "^1.5.0",
|
||||||
|
"@jridgewell/trace-mapping": "^0.3.24"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@jridgewell/resolve-uri": {
|
||||||
|
"version": "3.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
|
||||||
|
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@jridgewell/source-map": {
|
||||||
|
"version": "0.3.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz",
|
||||||
|
"integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==",
|
||||||
|
"dependencies": {
|
||||||
|
"@jridgewell/gen-mapping": "^0.3.5",
|
||||||
|
"@jridgewell/trace-mapping": "^0.3.25"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@jridgewell/sourcemap-codec": {
|
||||||
|
"version": "1.5.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
|
||||||
|
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="
|
||||||
|
},
|
||||||
|
"node_modules/@jridgewell/trace-mapping": {
|
||||||
|
"version": "0.3.31",
|
||||||
|
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
|
||||||
|
"integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
|
||||||
|
"dependencies": {
|
||||||
|
"@jridgewell/resolve-uri": "^3.1.0",
|
||||||
|
"@jridgewell/sourcemap-codec": "^1.4.14"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/plugin-commonjs": {
|
||||||
|
"version": "25.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz",
|
||||||
|
"integrity": "sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==",
|
||||||
|
"dependencies": {
|
||||||
|
"@rollup/pluginutils": "^5.0.1",
|
||||||
|
"commondir": "^1.0.1",
|
||||||
|
"estree-walker": "^2.0.2",
|
||||||
|
"glob": "^8.0.3",
|
||||||
|
"is-reference": "1.2.1",
|
||||||
|
"magic-string": "^0.30.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"rollup": "^2.68.0||^3.0.0||^4.0.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"rollup": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/plugin-json": {
|
||||||
|
"version": "6.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz",
|
||||||
|
"integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==",
|
||||||
|
"dependencies": {
|
||||||
|
"@rollup/pluginutils": "^5.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"rollup": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/plugin-node-resolve": {
|
||||||
|
"version": "15.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz",
|
||||||
|
"integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==",
|
||||||
|
"dependencies": {
|
||||||
|
"@rollup/pluginutils": "^5.0.1",
|
||||||
|
"@types/resolve": "1.20.2",
|
||||||
|
"deepmerge": "^4.2.2",
|
||||||
|
"is-module": "^1.0.0",
|
||||||
|
"resolve": "^1.22.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"rollup": "^2.78.0||^3.0.0||^4.0.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"rollup": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/pluginutils": {
|
||||||
|
"version": "5.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz",
|
||||||
|
"integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/estree": "^1.0.0",
|
||||||
|
"estree-walker": "^2.0.2",
|
||||||
|
"picomatch": "^4.0.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"rollup": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@socket.io/component-emitter": {
|
||||||
|
"version": "3.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
|
||||||
|
"integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA=="
|
||||||
|
},
|
||||||
|
"node_modules/@types/estree": {
|
||||||
|
"version": "1.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
|
||||||
|
"integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="
|
||||||
|
},
|
||||||
|
"node_modules/@types/node": {
|
||||||
|
"version": "20.19.37",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz",
|
||||||
|
"integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==",
|
||||||
|
"dependencies": {
|
||||||
|
"undici-types": "~6.21.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@types/resolve": {
|
||||||
|
"version": "1.20.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
|
||||||
|
"integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q=="
|
||||||
|
},
|
||||||
|
"node_modules/@types/sortablejs": {
|
||||||
|
"version": "1.15.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.9.tgz",
|
||||||
|
"integrity": "sha512-7HP+rZGE2p886PKV9c9OJzLBI6BBJu1O7lJGYnPyG3fS4/duUCcngkNCjsLwIMV+WMqANe3tt4irrXHSIe68OQ==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/acorn": {
|
||||||
|
"version": "8.16.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
|
||||||
|
"integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
|
||||||
|
"bin": {
|
||||||
|
"acorn": "bin/acorn"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/ansi_up": {
|
||||||
|
"version": "6.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi_up/-/ansi_up-6.0.6.tgz",
|
||||||
|
"integrity": "sha512-yIa1x3Ecf8jWP4UWEunNjqNX6gzE4vg2gGz+xqRGY+TBSucnYp6RRdPV4brmtg6bQ1ljD48mZ5iGSEj7QEpRKA==",
|
||||||
|
"engines": {
|
||||||
|
"node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/ansi-regex": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/ansi-styles": {
|
||||||
|
"version": "4.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||||
|
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"color-convert": "^2.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/balanced-match": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
|
||||||
|
},
|
||||||
|
"node_modules/brace-expansion": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"balanced-match": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/buffer-from": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
|
||||||
|
},
|
||||||
|
"node_modules/cliui": {
|
||||||
|
"version": "8.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
|
||||||
|
"integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"string-width": "^4.2.0",
|
||||||
|
"strip-ansi": "^6.0.1",
|
||||||
|
"wrap-ansi": "^7.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/color-convert": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"color-name": "~1.1.4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=7.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/color-name": {
|
||||||
|
"version": "1.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||||
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/commander": {
|
||||||
|
"version": "2.20.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
|
||||||
|
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
|
||||||
|
},
|
||||||
|
"node_modules/commondir": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="
|
||||||
|
},
|
||||||
|
"node_modules/debug": {
|
||||||
|
"version": "4.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
|
||||||
|
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
|
||||||
|
"dependencies": {
|
||||||
|
"ms": "^2.1.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"supports-color": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/deepmerge": {
|
||||||
|
"version": "4.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
|
||||||
|
"integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/dts-bundle-generator": {
|
||||||
|
"version": "9.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/dts-bundle-generator/-/dts-bundle-generator-9.5.1.tgz",
|
||||||
|
"integrity": "sha512-DxpJOb2FNnEyOzMkG11sxO2dmxPjthoVWxfKqWYJ/bI/rT1rvTMktF5EKjAYrRZu6Z6t3NhOUZ0sZ5ZXevOfbA==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"typescript": ">=5.0.2",
|
||||||
|
"yargs": "^17.6.0"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"dts-bundle-generator": "dist/bin/dts-bundle-generator.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/emoji-regex": {
|
||||||
|
"version": "8.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||||
|
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"node_modules/engine.io-client": {
|
||||||
|
"version": "6.6.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.4.tgz",
|
||||||
|
"integrity": "sha512-+kjUJnZGwzewFDw951CDWcwj35vMNf2fcj7xQWOctq1F2i1jkDdVvdFG9kM/BEChymCH36KgjnW0NsL58JYRxw==",
|
||||||
|
"dependencies": {
|
||||||
|
"@socket.io/component-emitter": "~3.1.0",
|
||||||
|
"debug": "~4.4.1",
|
||||||
|
"engine.io-parser": "~5.2.1",
|
||||||
|
"ws": "~8.18.3",
|
||||||
|
"xmlhttprequest-ssl": "~2.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/engine.io-parser": {
|
||||||
|
"version": "5.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
|
||||||
|
"integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/escalade": {
|
||||||
|
"version": "3.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
|
||||||
|
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/estree-walker": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
|
||||||
|
},
|
||||||
|
"node_modules/fs.realpath": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
|
||||||
|
},
|
||||||
|
"node_modules/fsevents": {
|
||||||
|
"version": "2.3.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
|
||||||
|
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/function-bind": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/get-caller-file": {
|
||||||
|
"version": "2.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
||||||
|
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": "6.* || 8.* || >= 10.*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/glob": {
|
||||||
|
"version": "8.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
|
||||||
|
"integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
|
||||||
|
"deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
|
||||||
|
"dependencies": {
|
||||||
|
"fs.realpath": "^1.0.0",
|
||||||
|
"inflight": "^1.0.4",
|
||||||
|
"inherits": "2",
|
||||||
|
"minimatch": "^5.0.1",
|
||||||
|
"once": "^1.3.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/has-flag": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/hasown": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"function-bind": "^1.1.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/inflight": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||||
|
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
|
||||||
|
"deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
|
||||||
|
"dependencies": {
|
||||||
|
"once": "^1.3.0",
|
||||||
|
"wrappy": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/inherits": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
||||||
|
},
|
||||||
|
"node_modules/is-core-module": {
|
||||||
|
"version": "2.16.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
|
||||||
|
"integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
|
||||||
|
"dependencies": {
|
||||||
|
"hasown": "^2.0.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/is-fullwidth-code-point": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/is-module": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g=="
|
||||||
|
},
|
||||||
|
"node_modules/is-reference": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
|
||||||
|
"integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/estree": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/jest-worker": {
|
||||||
|
"version": "26.6.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
|
||||||
|
"integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/node": "*",
|
||||||
|
"merge-stream": "^2.0.0",
|
||||||
|
"supports-color": "^7.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 10.13.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/js-tokens": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
|
||||||
|
},
|
||||||
|
"node_modules/magic-string": {
|
||||||
|
"version": "0.30.21",
|
||||||
|
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
|
||||||
|
"integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"@jridgewell/sourcemap-codec": "^1.5.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/material-symbols": {
|
||||||
|
"version": "0.17.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/material-symbols/-/material-symbols-0.17.4.tgz",
|
||||||
|
"integrity": "sha512-5zI+rSzAidMJxAIrQCVwnp4rMjFnx8aQg68lfFXtaDeksZzJ7m8eDl16y9bRNxMosuYbLKeDHDbOWHPJJTSLhQ=="
|
||||||
|
},
|
||||||
|
"node_modules/merge-stream": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
|
||||||
|
},
|
||||||
|
"node_modules/minimatch": {
|
||||||
|
"version": "5.1.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz",
|
||||||
|
"integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==",
|
||||||
|
"dependencies": {
|
||||||
|
"brace-expansion": "^2.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/morphux": {
|
||||||
|
"resolved": "../../../../MorphUX",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
|
"node_modules/ms": {
|
||||||
|
"version": "2.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||||
|
},
|
||||||
|
"node_modules/once": {
|
||||||
|
"version": "1.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||||
|
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
|
||||||
|
"dependencies": {
|
||||||
|
"wrappy": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/path-parse": {
|
||||||
|
"version": "1.0.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
|
||||||
|
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
|
||||||
|
},
|
||||||
|
"node_modules/picocolors": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
|
||||||
|
},
|
||||||
|
"node_modules/picomatch": {
|
||||||
|
"version": "4.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
|
||||||
|
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/jonschlinkert"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/randombytes": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"safe-buffer": "^5.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/require-directory": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
||||||
|
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/resolve": {
|
||||||
|
"version": "1.22.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
|
||||||
|
"integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"is-core-module": "^2.16.1",
|
||||||
|
"path-parse": "^1.0.7",
|
||||||
|
"supports-preserve-symlinks-flag": "^1.0.0"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"resolve": "bin/resolve"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/rollup": {
|
||||||
|
"version": "2.80.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.80.0.tgz",
|
||||||
|
"integrity": "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ==",
|
||||||
|
"bin": {
|
||||||
|
"rollup": "dist/bin/rollup"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0.0"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"fsevents": "~2.3.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/rollup-plugin-terser": {
|
||||||
|
"version": "7.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz",
|
||||||
|
"integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==",
|
||||||
|
"deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser",
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/code-frame": "^7.10.4",
|
||||||
|
"jest-worker": "^26.2.1",
|
||||||
|
"serialize-javascript": "^4.0.0",
|
||||||
|
"terser": "^5.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"rollup": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/safe-buffer": {
|
||||||
|
"version": "5.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||||
|
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patreon",
|
||||||
|
"url": "https://www.patreon.com/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "consulting",
|
||||||
|
"url": "https://feross.org/support"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/serialize-javascript": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
|
||||||
|
"dependencies": {
|
||||||
|
"randombytes": "^2.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/socket.io-client": {
|
||||||
|
"version": "4.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.3.tgz",
|
||||||
|
"integrity": "sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==",
|
||||||
|
"dependencies": {
|
||||||
|
"@socket.io/component-emitter": "~3.1.0",
|
||||||
|
"debug": "~4.4.1",
|
||||||
|
"engine.io-client": "~6.6.1",
|
||||||
|
"socket.io-parser": "~4.2.4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/socket.io-parser": {
|
||||||
|
"version": "4.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.5.tgz",
|
||||||
|
"integrity": "sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"@socket.io/component-emitter": "~3.1.0",
|
||||||
|
"debug": "~4.4.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/source-map": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
|
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/source-map-support": {
|
||||||
|
"version": "0.5.21",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
|
||||||
|
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
|
||||||
|
"dependencies": {
|
||||||
|
"buffer-from": "^1.0.0",
|
||||||
|
"source-map": "^0.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/string-width": {
|
||||||
|
"version": "4.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
||||||
|
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"emoji-regex": "^8.0.0",
|
||||||
|
"is-fullwidth-code-point": "^3.0.0",
|
||||||
|
"strip-ansi": "^6.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/strip-ansi": {
|
||||||
|
"version": "6.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
||||||
|
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-regex": "^5.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/supports-color": {
|
||||||
|
"version": "7.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||||
|
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||||
|
"dependencies": {
|
||||||
|
"has-flag": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/supports-preserve-symlinks-flag": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/terser": {
|
||||||
|
"version": "5.46.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz",
|
||||||
|
"integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==",
|
||||||
|
"dependencies": {
|
||||||
|
"@jridgewell/source-map": "^0.3.3",
|
||||||
|
"acorn": "^8.15.0",
|
||||||
|
"commander": "^2.20.0",
|
||||||
|
"source-map-support": "~0.5.20"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"terser": "bin/terser"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/typescript": {
|
||||||
|
"version": "5.9.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
|
||||||
|
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
||||||
|
"dev": true,
|
||||||
|
"bin": {
|
||||||
|
"tsc": "bin/tsc",
|
||||||
|
"tsserver": "bin/tsserver"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.17"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/undici-types": {
|
||||||
|
"version": "6.21.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
|
||||||
|
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="
|
||||||
|
},
|
||||||
|
"node_modules/wrap-ansi": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": "^4.0.0",
|
||||||
|
"string-width": "^4.1.0",
|
||||||
|
"strip-ansi": "^6.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/wrappy": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
|
||||||
|
},
|
||||||
|
"node_modules/ws": {
|
||||||
|
"version": "8.18.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
|
||||||
|
"integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"bufferutil": "^4.0.1",
|
||||||
|
"utf-8-validate": ">=5.0.2"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"bufferutil": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"utf-8-validate": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/xmlhttprequest-ssl": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/y18n": {
|
||||||
|
"version": "5.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
||||||
|
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/yargs": {
|
||||||
|
"version": "17.7.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
|
||||||
|
"integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"cliui": "^8.0.1",
|
||||||
|
"escalade": "^3.1.1",
|
||||||
|
"get-caller-file": "^2.0.5",
|
||||||
|
"require-directory": "^2.1.1",
|
||||||
|
"string-width": "^4.2.3",
|
||||||
|
"y18n": "^5.0.5",
|
||||||
|
"yargs-parser": "^21.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/yargs-parser": {
|
||||||
|
"version": "21.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
|
||||||
|
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
27
frontend/views/control/package.json
Normal file
27
frontend/views/control/package.json
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"scripts": {
|
||||||
|
"build": "sass scss/index.scss style.css && tsc && npm run bundle",
|
||||||
|
"watch-ts": "tsc -w",
|
||||||
|
"watch-scss": "sass scss/index.scss style.css -w",
|
||||||
|
"watch-rollup": "rollup -c --watch",
|
||||||
|
"watch-rebuildscss": "rm style.css && npm run watch-scss"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"@rollup/plugin-commonjs": "^25.0.7",
|
||||||
|
"@rollup/plugin-json": "^6.1.0",
|
||||||
|
"@rollup/plugin-node-resolve": "^15.1.0",
|
||||||
|
"@types/node": "^20.12.8",
|
||||||
|
"ansi_up": "^6.0.6",
|
||||||
|
"material-symbols": "^0.17.4",
|
||||||
|
"morphux": "file:../../../../MorphUX",
|
||||||
|
"rollup": "^2.79.1",
|
||||||
|
"rollup-plugin-terser": "^7.0.2",
|
||||||
|
"socket.io-client": "^4.8.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/sortablejs": "^1.15.8",
|
||||||
|
"dts-bundle-generator": "^9.5.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
19
frontend/views/control/rollup.config.js
Normal file
19
frontend/views/control/rollup.config.js
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import cjs from '@rollup/plugin-commonjs';
|
||||||
|
import node from '@rollup/plugin-node-resolve';
|
||||||
|
import { terser } from 'rollup-plugin-terser';
|
||||||
|
import json from '@rollup/plugin-json';
|
||||||
|
|
||||||
|
const production = !process.env.ROLLUP_WATCH;
|
||||||
|
|
||||||
|
export default {
|
||||||
|
input: 'dist/main.js',
|
||||||
|
output: [
|
||||||
|
{ file: 'script.js', format: 'iife', sourcemap: true, inlineDynamicImports: true }
|
||||||
|
],
|
||||||
|
plugins: [
|
||||||
|
node({ browser: true }),
|
||||||
|
cjs(),
|
||||||
|
production && terser(),
|
||||||
|
json()
|
||||||
|
],
|
||||||
|
};
|
||||||
14895
frontend/views/control/script.js
Normal file
14895
frontend/views/control/script.js
Normal file
File diff suppressed because it is too large
Load Diff
1
frontend/views/control/script.js.map
Normal file
1
frontend/views/control/script.js.map
Normal file
File diff suppressed because one or more lines are too long
183
frontend/views/control/scss/advanced.scss
Normal file
183
frontend/views/control/scss/advanced.scss
Normal file
@@ -0,0 +1,183 @@
|
|||||||
|
.ntsh-outofservicemode {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
gap: 20px;
|
||||||
|
margin-top: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ntsh-timer {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: 10px;
|
||||||
|
margin-top: 30px;
|
||||||
|
|
||||||
|
.ntsh-timer-row {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
gap: 20px;
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
width: 85px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="time"] {
|
||||||
|
position: relative;
|
||||||
|
padding: 10px;
|
||||||
|
border: 2px solid #000;
|
||||||
|
font-weight: 500;
|
||||||
|
transition-duration: 0.2s;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 20px;
|
||||||
|
|
||||||
|
&::-webkit-calendar-picker-indicator {
|
||||||
|
background: transparent;
|
||||||
|
bottom: 0;
|
||||||
|
color: transparent;
|
||||||
|
cursor: pointer;
|
||||||
|
height: auto;
|
||||||
|
left: 0;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ntsh-autolighting {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
gap: 20px;
|
||||||
|
margin: 30px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.ntsh_lightingsettings-container {
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
&.disabled {
|
||||||
|
opacity: .3;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ntsh_lightingsettings {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: 5px;
|
||||||
|
|
||||||
|
.ntsh_lightingsettings-row {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
gap: 20px;
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
width: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
position: relative;
|
||||||
|
padding: 10px;
|
||||||
|
border: 2px solid #000;
|
||||||
|
font-weight: 500;
|
||||||
|
transition-duration: 0.2s;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 20px;
|
||||||
|
|
||||||
|
&::-webkit-calendar-picker-indicator {
|
||||||
|
background: transparent;
|
||||||
|
bottom: 0;
|
||||||
|
color: transparent;
|
||||||
|
cursor: pointer;
|
||||||
|
height: auto;
|
||||||
|
left: 0;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ntsh_soundsettings {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: 5px;
|
||||||
|
|
||||||
|
&.disabled {
|
||||||
|
opacity: .3;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ntsh_soundsettings-row {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
gap: 20px;
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
width: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
padding: 10px;
|
||||||
|
border: 2px solid #000;
|
||||||
|
font-weight: 500;
|
||||||
|
transition-duration: 0.2s;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 20px;
|
||||||
|
|
||||||
|
&::-webkit-calendar-picker-indicator {
|
||||||
|
background: transparent;
|
||||||
|
bottom: 0;
|
||||||
|
color: transparent;
|
||||||
|
cursor: pointer;
|
||||||
|
height: auto;
|
||||||
|
left: 0;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ntsh_soundsettings-resetcontainer {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
|
||||||
|
.ntsh_soundsettings-reset {
|
||||||
|
padding: 10px 20px;
|
||||||
|
border: 2px solid #000;
|
||||||
|
font-weight: 500;
|
||||||
|
transition-duration: .2s;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: #d7ccc1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
70
frontend/views/control/scss/checklist.scss
Normal file
70
frontend/views/control/scss/checklist.scss
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
.ntsh-checklist {
|
||||||
|
width: 100%;
|
||||||
|
margin: 30px 0px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: 10px;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.ntsh-checklist-row {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
|
||||||
|
.ntsh-checklist-row-status {
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
margin: 0px 10px;
|
||||||
|
border-radius: 100%;
|
||||||
|
background: #00000024;
|
||||||
|
flex-shrink: 0;
|
||||||
|
|
||||||
|
&.GREEN {
|
||||||
|
background: #1db100;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.RED {
|
||||||
|
background: #b10000;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.YELLOW {
|
||||||
|
background: #b1a100;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.GRAY {
|
||||||
|
background: #d5c7ba;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ntsh-checklist-row-text {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ntsh-checklist-row-buttons {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 3px;
|
||||||
|
|
||||||
|
.ntsh-checklist-row-button {
|
||||||
|
align-self: stretch;
|
||||||
|
display: none;
|
||||||
|
padding: 5px 10px;
|
||||||
|
border: 2px solid #000;
|
||||||
|
font-weight: 500;
|
||||||
|
transition-duration: 0.2s;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 12px;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: #d7ccc1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
60
frontend/views/control/scss/home.scss
Normal file
60
frontend/views/control/scss/home.scss
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
.ntsh-fullreboot {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
.ntsh-fullreboot-button {
|
||||||
|
padding: 20px;
|
||||||
|
border: 2px solid #000;
|
||||||
|
font-weight: 500;
|
||||||
|
transition-duration: 0.2s;
|
||||||
|
cursor: pointer;
|
||||||
|
background: #ff644e;
|
||||||
|
font-size: 25px;
|
||||||
|
font-weight: 800;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: #be4939;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.ntsh-support {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
gap: 20px;
|
||||||
|
margin-top: 30px;
|
||||||
|
|
||||||
|
img {
|
||||||
|
height: 50px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition-duration: .2s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
filter: brightness(.8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ntsh-calibration {
|
||||||
|
width: 100%;
|
||||||
|
margin: 30px 0px;
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ntsh_callanchor {
|
||||||
|
width: 100%;
|
||||||
|
display: block;
|
||||||
|
background: #454545;
|
||||||
|
text-align: center;
|
||||||
|
padding: 10px 00px;
|
||||||
|
font-size: 40px;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
75
frontend/views/control/scss/index.scss
Normal file
75
frontend/views/control/scss/index.scss
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
@use '../node_modules/morphux/style.css';
|
||||||
|
@use './topbar.scss';
|
||||||
|
@use './checklist.scss';
|
||||||
|
@use './text.scss';
|
||||||
|
@use './switch.scss';
|
||||||
|
@use './home.scss';
|
||||||
|
@use './advanced.scss';
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: Roboto;
|
||||||
|
src: url(/font/Roboto-VariableFont_wdth,wght.ttf) format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: ScothBrace;
|
||||||
|
src: url(/font/ScothBrace.ttf) format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: RidleyGrotesk;
|
||||||
|
src: url(/font/RidleyGrotesk-Bold.otf) format('opentype');
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: RidleyGrotesk;
|
||||||
|
src: url(/font/RidleyGrotesk-Regular.otf) format('opentype');
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0px;
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
color: #000;
|
||||||
|
font-family: RidleyGrotesk, sans-serif;
|
||||||
|
background: #E1EAF6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ntsh {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0px;
|
||||||
|
overflow-y: scroll;
|
||||||
|
|
||||||
|
.ntsh-wrapper {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 100%;
|
||||||
|
background: linear-gradient(0deg, #E1EAF6, #F9E7D6);
|
||||||
|
|
||||||
|
.ntsh-inlay {
|
||||||
|
width: min(800px, calc(100% - 40px));
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ntsh_tabs {
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
.ntsh_tab {
|
||||||
|
width: 100%;
|
||||||
|
display: none;
|
||||||
|
|
||||||
|
&.visible {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.ntsh-separator {
|
||||||
|
width: 100%;
|
||||||
|
border-bottom: 10px dotted #000;
|
||||||
|
margin: 30px 0px;
|
||||||
|
}
|
||||||
61
frontend/views/control/scss/switch.scss
Normal file
61
frontend/views/control/scss/switch.scss
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
.switch {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
width: 60px;
|
||||||
|
height: 34px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide default HTML checkbox */
|
||||||
|
.switch input {
|
||||||
|
opacity: 0;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The slider */
|
||||||
|
.slider {
|
||||||
|
position: absolute;
|
||||||
|
cursor: pointer;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background-color: #ccc;
|
||||||
|
-webkit-transition: .4s;
|
||||||
|
transition: .4s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider:before {
|
||||||
|
position: absolute;
|
||||||
|
content: "";
|
||||||
|
height: 26px;
|
||||||
|
width: 26px;
|
||||||
|
left: 4px;
|
||||||
|
bottom: 4px;
|
||||||
|
background-color: white;
|
||||||
|
-webkit-transition: .4s;
|
||||||
|
transition: .4s;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:checked+.slider {
|
||||||
|
background-color: #2bc038;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:focus+.slider {
|
||||||
|
box-shadow: 0 0 1px #2bc038;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:checked+.slider:before {
|
||||||
|
-webkit-transform: translateX(26px);
|
||||||
|
-ms-transform: translateX(26px);
|
||||||
|
transform: translateX(26px);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Rounded sliders */
|
||||||
|
.slider.round {
|
||||||
|
border-radius: 34px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider.round:before {
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
27
frontend/views/control/scss/text.scss
Normal file
27
frontend/views/control/scss/text.scss
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
h1 {
|
||||||
|
font-size: 45px;
|
||||||
|
margin: 0px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 24px;
|
||||||
|
margin: 0px 0px 5px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 22px;
|
||||||
|
margin: 0px;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
font-size: 14px;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
font-size: 14px;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
30
frontend/views/control/scss/topbar.scss
Normal file
30
frontend/views/control/scss/topbar.scss
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
.ntsh-topbar {
|
||||||
|
.ntsh_menubar {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
|
||||||
|
.ntsh_menubar-item {
|
||||||
|
padding: 10px 20px;
|
||||||
|
border: 2px solid #000;
|
||||||
|
font-weight: 500;
|
||||||
|
transition-duration: .2s;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: #d7ccc1;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.selected {
|
||||||
|
pointer-events: none;
|
||||||
|
opacity: .3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
2831
frontend/views/control/style.css
Normal file
2831
frontend/views/control/style.css
Normal file
File diff suppressed because it is too large
Load Diff
1
frontend/views/control/style.css.map
Normal file
1
frontend/views/control/style.css.map
Normal file
File diff suppressed because one or more lines are too long
41
frontend/views/control/ts/calibration.ts
Normal file
41
frontend/views/control/ts/calibration.ts
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
import { Main } from './main';
|
||||||
|
|
||||||
|
export class Calibration {
|
||||||
|
private _Main: Main;
|
||||||
|
|
||||||
|
observer: IntersectionObserver;
|
||||||
|
visible: boolean = false;
|
||||||
|
|
||||||
|
container: HTMLDivElement = document.querySelector('.ntsh-calibration');
|
||||||
|
image: HTMLImageElement = this.container.querySelector('img');
|
||||||
|
|
||||||
|
constructor(Main: Main) {
|
||||||
|
this._Main = Main;
|
||||||
|
|
||||||
|
this.registerListeners();
|
||||||
|
|
||||||
|
this.startClock();
|
||||||
|
}
|
||||||
|
|
||||||
|
private startClock() {
|
||||||
|
setInterval(() => {
|
||||||
|
if (this.visible && this.image)
|
||||||
|
this.image.src = `/calibrationImage?t=${Date.now()}`;
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
private registerListeners() {
|
||||||
|
this.observer = new IntersectionObserver((entries) => {
|
||||||
|
entries.forEach((entry) => {
|
||||||
|
if (entry.isIntersecting) {
|
||||||
|
this.visible = true;
|
||||||
|
console.log('Calibration visible');
|
||||||
|
} else {
|
||||||
|
this.visible = false;
|
||||||
|
console.log('Calibration not visible');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
this.observer.observe(this.container);
|
||||||
|
}
|
||||||
|
}
|
||||||
146
frontend/views/control/ts/checklist.ts
Normal file
146
frontend/views/control/ts/checklist.ts
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
import { Main } from './main';
|
||||||
|
import { MorphFeature } from 'morphux';
|
||||||
|
|
||||||
|
export class Checklist {
|
||||||
|
private _Main: Main;
|
||||||
|
|
||||||
|
Rows = {
|
||||||
|
CAMERAPC: document.querySelector(
|
||||||
|
`.ntsh-checklist-row[status="CAMERAPC"]`,
|
||||||
|
) as HTMLDivElement,
|
||||||
|
CAMERAPROCESS: document.querySelector(
|
||||||
|
`.ntsh-checklist-row[status="CAMERAPROCESS"]`,
|
||||||
|
) as HTMLDivElement,
|
||||||
|
CAMERAUNITYSTREAM: document.querySelector(
|
||||||
|
`.ntsh-checklist-row[status="CAMERAUNITYSTREAM"]`,
|
||||||
|
) as HTMLDivElement,
|
||||||
|
UNITYBUILD: document.querySelector(
|
||||||
|
`.ntsh-checklist-row[status="UNITYBUILD"]`,
|
||||||
|
) as HTMLDivElement,
|
||||||
|
REPLAYFUNCTION: document.querySelector(
|
||||||
|
`.ntsh-checklist-row[status="REPLAYFUNCTION"]`,
|
||||||
|
) as HTMLDivElement,
|
||||||
|
};
|
||||||
|
FullReboot: HTMLDivElement = document.querySelector(
|
||||||
|
'.ntsh-fullreboot-button',
|
||||||
|
);
|
||||||
|
|
||||||
|
constructor(Main: Main) {
|
||||||
|
this._Main = Main;
|
||||||
|
|
||||||
|
this.registerListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
update(status: Status) {
|
||||||
|
this.updateRow(this.Rows.CAMERAPC, status.CAMERAPC);
|
||||||
|
this.updateRow(this.Rows.CAMERAPROCESS, status.CAMERAPROCESS);
|
||||||
|
this.updateRow(this.Rows.CAMERAUNITYSTREAM, status.CAMERAUNITYSTREAM);
|
||||||
|
this.updateRow(this.Rows.UNITYBUILD, status.UNITYBUILD);
|
||||||
|
this.updateRow(this.Rows.REPLAYFUNCTION, status.REPLAYFUNCTION);
|
||||||
|
console.log('Updated checklist:', status);
|
||||||
|
}
|
||||||
|
|
||||||
|
updateRow(row: HTMLDivElement, state: StateEntry) {
|
||||||
|
const status: HTMLDivElement = row.querySelector(
|
||||||
|
'.ntsh-checklist-row-status',
|
||||||
|
);
|
||||||
|
const message: HTMLDivElement = row.querySelector('p');
|
||||||
|
|
||||||
|
const startButton: HTMLDivElement = row.querySelector(
|
||||||
|
'.ntsh-checklist-row-button.start',
|
||||||
|
);
|
||||||
|
const stopButton: HTMLDivElement = row.querySelector(
|
||||||
|
'.ntsh-checklist-row-button.stop',
|
||||||
|
);
|
||||||
|
const rebootButton: HTMLDivElement = row.querySelector(
|
||||||
|
'.ntsh-checklist-row-button.reboot',
|
||||||
|
);
|
||||||
|
|
||||||
|
status.classList.remove('RED', 'GREEN', 'YELLOW', 'GRAY');
|
||||||
|
status.classList.add(state.state);
|
||||||
|
|
||||||
|
message.innerText = state.message;
|
||||||
|
|
||||||
|
startButton.style.display = state.buttons?.start ? 'block' : 'none';
|
||||||
|
stopButton.style.display = state.buttons?.stop ? 'block' : 'none';
|
||||||
|
rebootButton.style.display = state.buttons?.reboot ? 'block' : 'none';
|
||||||
|
}
|
||||||
|
|
||||||
|
private registerListeners() {
|
||||||
|
this.FullReboot.onclick = () => {
|
||||||
|
MorphFeature.Confirm(
|
||||||
|
{
|
||||||
|
title: 'Full Reboot',
|
||||||
|
message: 'Are you sure you want to perform a full reboot?',
|
||||||
|
},
|
||||||
|
(state) => {
|
||||||
|
if (!state) return;
|
||||||
|
this._Main.socket.emit('status', 'fullreboot');
|
||||||
|
},
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
for (const key in this.Rows) {
|
||||||
|
const row = this.Rows[key];
|
||||||
|
|
||||||
|
const startButton: HTMLDivElement = row.querySelector(
|
||||||
|
'.ntsh-checklist-row-button.start',
|
||||||
|
);
|
||||||
|
startButton.onclick = () =>
|
||||||
|
MorphFeature.Confirm(
|
||||||
|
{
|
||||||
|
title: 'Start',
|
||||||
|
message: 'Are you sure you want to start?',
|
||||||
|
},
|
||||||
|
(state) => {
|
||||||
|
if (!state) return;
|
||||||
|
this._Main.socket.emit('status', 'start', key);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
const stopButton: HTMLDivElement = row.querySelector(
|
||||||
|
'.ntsh-checklist-row-button.stop',
|
||||||
|
);
|
||||||
|
stopButton.onclick = () =>
|
||||||
|
MorphFeature.Confirm(
|
||||||
|
{
|
||||||
|
title: 'Stop',
|
||||||
|
message: 'Are you sure you want to stop?',
|
||||||
|
},
|
||||||
|
(state) => {
|
||||||
|
if (!state) return;
|
||||||
|
this._Main.socket.emit('status', 'stop', key);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
const rebootButton: HTMLDivElement = row.querySelector(
|
||||||
|
'.ntsh-checklist-row-button.reboot',
|
||||||
|
);
|
||||||
|
rebootButton.onclick = () =>
|
||||||
|
MorphFeature.Confirm(
|
||||||
|
{
|
||||||
|
title: 'Reboot',
|
||||||
|
message: 'Are you sure you want to reboot?',
|
||||||
|
},
|
||||||
|
(state) => {
|
||||||
|
if (!state) return;
|
||||||
|
this._Main.socket.emit('status', 'reboot', key);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Status {
|
||||||
|
CAMERAPC: StateEntry;
|
||||||
|
CAMERAPROCESS: StateEntry;
|
||||||
|
CAMERAUNITYSTREAM: StateEntry;
|
||||||
|
UNITYBUILD: StateEntry;
|
||||||
|
REPLAYFUNCTION: StateEntry;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface StateEntry {
|
||||||
|
state: 'GREEN' | 'RED' | 'YELLOW' | 'GRAY';
|
||||||
|
message: string;
|
||||||
|
buttons?: { reboot?: boolean; start?: boolean; stop?: boolean };
|
||||||
|
}
|
||||||
180
frontend/views/control/ts/main.ts
Normal file
180
frontend/views/control/ts/main.ts
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
import { io } from 'socket.io-client';
|
||||||
|
import { Menu } from './menu';
|
||||||
|
import { Checklist } from './checklist';
|
||||||
|
import { Calibration } from './calibration';
|
||||||
|
import { ce, MorphComponent, MorphFeature } from 'morphux';
|
||||||
|
import { OutOfServiceMode } from './outOfServiceMode';
|
||||||
|
import { Timer } from './timer';
|
||||||
|
|
||||||
|
const socket = io('/');
|
||||||
|
|
||||||
|
export class Main {
|
||||||
|
Menu = new Menu();
|
||||||
|
CheckList = new Checklist(this);
|
||||||
|
Calibration = new Calibration(this);
|
||||||
|
OutOfServiceMode = new OutOfServiceMode(this);
|
||||||
|
Timer = new Timer(this);
|
||||||
|
|
||||||
|
socket = socket;
|
||||||
|
|
||||||
|
supportButton: HTMLDivElement = document.querySelector('.ntsh-support img');
|
||||||
|
supportNumber: string = '';
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.registerListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
private registerListeners() {
|
||||||
|
this.supportButton.onclick = () => this.showSupport();
|
||||||
|
|
||||||
|
socket.on('status', (data) => {
|
||||||
|
this.CheckList.update(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('supportNumber', (number: string) => {
|
||||||
|
this.supportNumber = number;
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('unityWebSocketState', (state: UnityWebSocketStatus) => {
|
||||||
|
this.OutOfServiceMode.input.checked =
|
||||||
|
state?.parameters?.outOfService ?? false;
|
||||||
|
this.OutOfServiceMode.state =
|
||||||
|
state?.parameters?.outOfService ?? false;
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('timer', (data) => {
|
||||||
|
this.Timer.update(data);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async executeCommand(
|
||||||
|
command: string,
|
||||||
|
message: string,
|
||||||
|
type: 'unityRunner' | 'unityWebSocket' = 'unityRunner',
|
||||||
|
): Promise<boolean> {
|
||||||
|
return new Promise<boolean>(async (resolve) => {
|
||||||
|
const confirmed = await MorphFeature.Confirm({
|
||||||
|
title: 'Are you sure?',
|
||||||
|
message,
|
||||||
|
});
|
||||||
|
if (!confirmed) return resolve(false);
|
||||||
|
|
||||||
|
MorphFeature.Loader({
|
||||||
|
active: true,
|
||||||
|
message: `Dispatching command...`,
|
||||||
|
});
|
||||||
|
socket.emit(
|
||||||
|
type,
|
||||||
|
command,
|
||||||
|
(response: { succeed: boolean; message?: string }) => {
|
||||||
|
MorphFeature.Loader({ active: false });
|
||||||
|
|
||||||
|
if (!response.succeed)
|
||||||
|
return MorphFeature.Alert({
|
||||||
|
title: 'Error',
|
||||||
|
message: response.message,
|
||||||
|
});
|
||||||
|
|
||||||
|
MorphFeature.Notification({
|
||||||
|
level: 'success',
|
||||||
|
message: `Dispatched command`,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
resolve(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const _Main = new Main();
|
||||||
|
|
||||||
|
export type ServiceState =
|
||||||
|
| 'CONNECTING'
|
||||||
|
| 'CONNECTED'
|
||||||
|
| 'DISCONNECTED'
|
||||||
|
| 'FAILED';
|
||||||
|
|
||||||
|
interface UnityWebSocketStatus {
|
||||||
|
state: ServiceState;
|
||||||
|
message?: string;
|
||||||
|
error?: string;
|
||||||
|
|
||||||
|
parameters: UnityParameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface UnityParameters {
|
||||||
|
timelineWatching: boolean;
|
||||||
|
timelineStanding: boolean;
|
||||||
|
timelineProgress: number;
|
||||||
|
zedPath: string;
|
||||||
|
zedReady: boolean;
|
||||||
|
zedFPS: string;
|
||||||
|
outOfService: boolean;
|
||||||
|
sliders: UnityParameterSlider[];
|
||||||
|
advancedSliders: UnityParameterSlider[];
|
||||||
|
sensors: UnitySocketMessageHeartbeat['heartbeat']['dataSensors'];
|
||||||
|
}
|
||||||
|
|
||||||
|
type UnityHeartbeatSlider =
|
||||||
|
UnitySocketMessageHeartbeat['heartbeat']['dataSliders'][number];
|
||||||
|
interface UnityParameterSlider extends UnityHeartbeatSlider {
|
||||||
|
visualMultiplier: number;
|
||||||
|
decimalPlaces: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface UnitySocketMessageBase {
|
||||||
|
type: string;
|
||||||
|
timestamp: number;
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
isWatching: boolean;
|
||||||
|
timelineProgress: number;
|
||||||
|
};
|
||||||
|
zedCamera: {
|
||||||
|
cameraFPS: string;
|
||||||
|
isZedReady: boolean;
|
||||||
|
streamInputIP: string;
|
||||||
|
streamInputPort: number;
|
||||||
|
zedGrabError: number;
|
||||||
|
};
|
||||||
|
showOutOfService?: boolean;
|
||||||
|
};
|
||||||
|
}
|
||||||
42
frontend/views/control/ts/menu.ts
Normal file
42
frontend/views/control/ts/menu.ts
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
export class Menu {
|
||||||
|
menuContainer: HTMLDivElement = document.querySelector('.ntsh_menubar');
|
||||||
|
tabContainer: HTMLDivElement = document.querySelector('.ntsh_tabs');
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.registerListeners();
|
||||||
|
|
||||||
|
if (window.location.search.includes('advanced'))
|
||||||
|
this.selectTab('advanced');
|
||||||
|
}
|
||||||
|
|
||||||
|
selectTab(tabId: string) {
|
||||||
|
this.menuContainer
|
||||||
|
.querySelectorAll('.ntsh_menubar-item')
|
||||||
|
.forEach((item) => {
|
||||||
|
if (item.getAttribute('tabid') === tabId) {
|
||||||
|
item.classList.add('selected');
|
||||||
|
} else {
|
||||||
|
item.classList.remove('selected');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.tabContainer.querySelectorAll('.ntsh_tab').forEach((tab) => {
|
||||||
|
if (tab.getAttribute('tabid') === tabId) {
|
||||||
|
tab.classList.add('visible');
|
||||||
|
} else {
|
||||||
|
tab.classList.remove('visible');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private registerListeners() {
|
||||||
|
this.menuContainer
|
||||||
|
.querySelectorAll('.ntsh_menubar-item')
|
||||||
|
.forEach((item) => {
|
||||||
|
item.addEventListener('click', () => {
|
||||||
|
const itemId = item.getAttribute('tabid');
|
||||||
|
this.selectTab(itemId);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
29
frontend/views/control/ts/outOfServiceMode.ts
Normal file
29
frontend/views/control/ts/outOfServiceMode.ts
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import { MorphComponent } from 'morphux';
|
||||||
|
import { Main } from './main';
|
||||||
|
|
||||||
|
export class OutOfServiceMode {
|
||||||
|
private _Main: Main;
|
||||||
|
|
||||||
|
state: boolean = false;
|
||||||
|
input: HTMLInputElement = document.querySelector(
|
||||||
|
'.ntsh-outofservicemode-input',
|
||||||
|
);
|
||||||
|
|
||||||
|
constructor(Main: Main) {
|
||||||
|
this._Main = Main;
|
||||||
|
|
||||||
|
this.registerListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
private registerListeners() {
|
||||||
|
this.input.addEventListener('change', async () => {
|
||||||
|
const valid = await this._Main.executeCommand(
|
||||||
|
this.state ? 'disableOutOfService' : 'enableOutOfService',
|
||||||
|
`Are you sure you want to set the installation to "${this.state ? 'Out of Service' : 'Operational'}"?`,
|
||||||
|
'unityWebSocket',
|
||||||
|
);
|
||||||
|
if (!valid) this.input.checked = this.state;
|
||||||
|
this.state = this.input.checked;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
36
frontend/views/control/ts/timer.ts
Normal file
36
frontend/views/control/ts/timer.ts
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import { Main } from './main';
|
||||||
|
|
||||||
|
export class Timer {
|
||||||
|
private _Main: Main;
|
||||||
|
|
||||||
|
startup: HTMLInputElement = document.querySelector('.ntsh-timer-startup');
|
||||||
|
shutdown: HTMLInputElement = document.querySelector('.ntsh-timer-shutdown');
|
||||||
|
|
||||||
|
constructor(Main: Main) {
|
||||||
|
this._Main = Main;
|
||||||
|
|
||||||
|
this.registerListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
update(data: {
|
||||||
|
start: { hour: number; minute: number };
|
||||||
|
end: { hour: number; minute: number };
|
||||||
|
}) {
|
||||||
|
const start = `${data.start.hour.toString().padStart(2, '0')}:${data.start.minute.toString().padStart(2, '0')}`;
|
||||||
|
const end = `${data.end.hour.toString().padStart(2, '0')}:${data.end.minute.toString().padStart(2, '0')}`;
|
||||||
|
|
||||||
|
this.startup.value = start;
|
||||||
|
this.shutdown.value = end;
|
||||||
|
}
|
||||||
|
|
||||||
|
registerListeners() {
|
||||||
|
this.startup.onchange = () => {
|
||||||
|
const [hour, minute] = this.startup.value.split(':').map(Number);
|
||||||
|
this._Main.socket.emit('setTimerStart', { hour, minute });
|
||||||
|
};
|
||||||
|
this.shutdown.onchange = () => {
|
||||||
|
const [hour, minute] = this.shutdown.value.split(':').map(Number);
|
||||||
|
this._Main.socket.emit('setTimerEnd', { hour, minute });
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
9
frontend/views/control/tsconfig.json
Normal file
9
frontend/views/control/tsconfig.json
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "dist",
|
||||||
|
"sourceMap": true
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"ts/**/*"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -7,8 +7,8 @@
|
|||||||
<title>NTSH Control</title>
|
<title>NTSH Control</title>
|
||||||
|
|
||||||
<link rel="stylesheet" href="/material-symbols/index.css">
|
<link rel="stylesheet" href="/material-symbols/index.css">
|
||||||
<link rel="stylesheet" href="./style.css">
|
<link rel="stylesheet" href="/dashboard/style.css">
|
||||||
<script defer src="./script.js" defer></script>
|
<script defer src="/dashboard/script.js" defer></script>
|
||||||
|
|
||||||
<link rel="icon" type="image/png" sizes="32x32" href="/img/cloud_thick.png">
|
<link rel="icon" type="image/png" sizes="32x32" href="/img/cloud_thick.png">
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
43
package-lock.json
generated
43
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "ntshcontrol",
|
"name": "ntshcontrol",
|
||||||
"version": "1.0.0",
|
"version": "2026.3.1",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "ntshcontrol",
|
"name": "ntshcontrol",
|
||||||
"version": "1.0.0",
|
"version": "2026.3.1",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/express": "^5.0.3",
|
"@types/express": "^5.0.3",
|
||||||
@@ -15,6 +15,7 @@
|
|||||||
"@types/ws": "^8.18.1",
|
"@types/ws": "^8.18.1",
|
||||||
"express": "^5.1.0",
|
"express": "^5.1.0",
|
||||||
"fs-extra": "^11.3.2",
|
"fs-extra": "^11.3.2",
|
||||||
|
"naudiodon": "^2.3.6",
|
||||||
"ping": "^1.0.0",
|
"ping": "^1.0.0",
|
||||||
"socket.io": "^4.8.1",
|
"socket.io": "^4.8.1",
|
||||||
"socket.io-client": "^4.8.1",
|
"socket.io-client": "^4.8.1",
|
||||||
@@ -221,6 +222,14 @@
|
|||||||
"node": "^4.5.0 || >= 5.9"
|
"node": "^4.5.0 || >= 5.9"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/bindings": {
|
||||||
|
"version": "1.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
|
||||||
|
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"file-uri-to-path": "1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/body-parser": {
|
"node_modules/body-parser": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz",
|
||||||
@@ -691,6 +700,11 @@
|
|||||||
"url": "https://opencollective.com/express"
|
"url": "https://opencollective.com/express"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/file-uri-to-path": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
|
||||||
|
},
|
||||||
"node_modules/finalhandler": {
|
"node_modules/finalhandler": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz",
|
||||||
@@ -1125,6 +1139,21 @@
|
|||||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/nan": {
|
||||||
|
"version": "2.25.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/nan/-/nan-2.25.0.tgz",
|
||||||
|
"integrity": "sha512-0M90Ag7Xn5KMLLZ7zliPWP3rT90P6PN+IzVFS0VqmnPktBk3700xUVv8Ikm9EUaUE5SDWdp/BIxdENzVznpm1g=="
|
||||||
|
},
|
||||||
|
"node_modules/naudiodon": {
|
||||||
|
"version": "2.3.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/naudiodon/-/naudiodon-2.3.6.tgz",
|
||||||
|
"integrity": "sha512-6NWMV4lAdBSoHIh3jcXG/tjCzBLCafh6uuhwUdtDbPbj8xVJ8FOgKi6lU0rkHrW22Up5AFIrWPSiAhGOxmhEQQ==",
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"dependencies": {
|
||||||
|
"bindings": "^1.5.0",
|
||||||
|
"segfault-handler": "^1.3.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/negotiator": {
|
"node_modules/negotiator": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
|
||||||
@@ -1326,6 +1355,16 @@
|
|||||||
"integrity": "sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q==",
|
"integrity": "sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q==",
|
||||||
"license": "BSD-3-Clause"
|
"license": "BSD-3-Clause"
|
||||||
},
|
},
|
||||||
|
"node_modules/segfault-handler": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/segfault-handler/-/segfault-handler-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-p7kVHo+4uoYkr0jmIiTBthwV5L2qmWtben/KDunDZ834mbos+tY+iO0//HpAJpOFSQZZ+wxKWuRo4DxV02B7Lg==",
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"dependencies": {
|
||||||
|
"bindings": "^1.2.1",
|
||||||
|
"nan": "^2.14.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/semver": {
|
"node_modules/semver": {
|
||||||
"version": "7.7.3",
|
"version": "7.7.3",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ntshcontrol",
|
"name": "ntshcontrol",
|
||||||
"version": "2025.11.2",
|
"version": "2026.3.1",
|
||||||
"main": "dist/Entry.js",
|
"main": "dist/Entry.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node ."
|
"start": "node ."
|
||||||
@@ -15,6 +15,7 @@
|
|||||||
"@types/ws": "^8.18.1",
|
"@types/ws": "^8.18.1",
|
||||||
"express": "^5.1.0",
|
"express": "^5.1.0",
|
||||||
"fs-extra": "^11.3.2",
|
"fs-extra": "^11.3.2",
|
||||||
|
"naudiodon": "^2.3.6",
|
||||||
"ping": "^1.0.0",
|
"ping": "^1.0.0",
|
||||||
"socket.io": "^4.8.1",
|
"socket.io": "^4.8.1",
|
||||||
"socket.io-client": "^4.8.1",
|
"socket.io-client": "^4.8.1",
|
||||||
|
|||||||
112
src/Audio.ts
Normal file
112
src/Audio.ts
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
import { pathExistsSync, readJSONSync, writeFile } from 'fs-extra';
|
||||||
|
import { Main } from './Main';
|
||||||
|
import { join } from 'path';
|
||||||
|
const portAudio = require('naudiodon');
|
||||||
|
|
||||||
|
const PREFIX = '[Audio]';
|
||||||
|
export class AudioChecker {
|
||||||
|
private _Main: Main;
|
||||||
|
|
||||||
|
private configPath: string;
|
||||||
|
|
||||||
|
deviceName: string = null;
|
||||||
|
|
||||||
|
constructor(Main: Main) {
|
||||||
|
this._Main = Main;
|
||||||
|
|
||||||
|
this.configPath = join(this._Main.dataPath, 'audio.json');
|
||||||
|
this.load();
|
||||||
|
}
|
||||||
|
|
||||||
|
async waitForDevice() {
|
||||||
|
if ((this.deviceName ?? '').trim().length == 0) {
|
||||||
|
console.log(
|
||||||
|
PREFIX,
|
||||||
|
'No audio device configured, skipping audio check. Available devices:',
|
||||||
|
);
|
||||||
|
|
||||||
|
portAudio
|
||||||
|
.getDevices()
|
||||||
|
.filter((device) => device.maxOutputChannels > 0)
|
||||||
|
.forEach((device) => {
|
||||||
|
console.log(` - ${device.name}`);
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(PREFIX, `Waiting for device "${this.deviceName}"...`);
|
||||||
|
|
||||||
|
let counter = 0;
|
||||||
|
return new Promise<void>((resolve) => {
|
||||||
|
const c = setInterval(() => {
|
||||||
|
counter++;
|
||||||
|
const availableDevices = portAudio
|
||||||
|
.getDevices()
|
||||||
|
.filter((device) => device.maxOutputChannels > 0)
|
||||||
|
.map((device) => device.name);
|
||||||
|
|
||||||
|
if (!availableDevices.includes(this.deviceName)) {
|
||||||
|
if (counter == 3) {
|
||||||
|
console.log(
|
||||||
|
PREFIX,
|
||||||
|
'Trouble finding the correct device. Available devices:',
|
||||||
|
);
|
||||||
|
availableDevices.forEach((device) => {
|
||||||
|
console.log(` - ${device}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const hostApis = portAudio.getHostAPIs();
|
||||||
|
const defaultOutputDeviceId =
|
||||||
|
hostApis.HostAPIs[hostApis.defaultHostAPI].defaultOutput;
|
||||||
|
const defaultOutputDeviceName = portAudio
|
||||||
|
.getDevices()
|
||||||
|
.find(
|
||||||
|
(device) => device.id === defaultOutputDeviceId,
|
||||||
|
)?.name;
|
||||||
|
if (defaultOutputDeviceName !== this.deviceName) {
|
||||||
|
console.warn(
|
||||||
|
PREFIX,
|
||||||
|
`The configured device "${this.deviceName}" is not set as the default output device. Please set it as the default output device to ensure proper functionality. Current default output device: "${defaultOutputDeviceName}".`,
|
||||||
|
);
|
||||||
|
this._Main.Twilio.sendError(
|
||||||
|
'Audio',
|
||||||
|
`The configured device "${this.deviceName}" is not set as the default output device. Current default output device: "${defaultOutputDeviceName}".`,
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
clearInterval(c);
|
||||||
|
resolve();
|
||||||
|
console.log(PREFIX, `Device "${this.deviceName}" is ready!`);
|
||||||
|
}, 1000);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
load() {
|
||||||
|
console.log(PREFIX, 'Loading audio configuration...');
|
||||||
|
const exists = pathExistsSync(this.configPath);
|
||||||
|
if (!exists) return this.save();
|
||||||
|
|
||||||
|
const data = readJSONSync(this.configPath);
|
||||||
|
this.deviceName = data.deviceName;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _save: NodeJS.Timeout;
|
||||||
|
async save() {
|
||||||
|
if (this._save) clearTimeout(this._save);
|
||||||
|
|
||||||
|
this._save = setTimeout(async () => {
|
||||||
|
writeFile(
|
||||||
|
this.configPath,
|
||||||
|
JSON.stringify(
|
||||||
|
{ deviceName: this.deviceName ?? null },
|
||||||
|
null,
|
||||||
|
4,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import { io, Socket } from 'socket.io-client';
|
import { io, Socket } from 'socket.io-client';
|
||||||
import { Main } from './Main';
|
import { Main } from './Main';
|
||||||
import { delay, ServiceState } from './Utils';
|
import { delay, ServiceState } from './Utils';
|
||||||
|
import { State, StatusType } from './Status';
|
||||||
|
|
||||||
const PREFIX = `[CameraRunner]`;
|
const PREFIX = `[CameraRunner]`;
|
||||||
export class CameraRunner {
|
export class CameraRunner {
|
||||||
@@ -43,7 +44,7 @@ export class CameraRunner {
|
|||||||
|
|
||||||
sendCommand(
|
sendCommand(
|
||||||
command: 'reboot' | 'restart',
|
command: 'reboot' | 'restart',
|
||||||
callback: (response: { succeed: boolean; message?: string }) => void
|
callback: (response: { succeed: boolean; message?: string }) => void,
|
||||||
) {
|
) {
|
||||||
if (this.socket == null || !this.socket.connected)
|
if (this.socket == null || !this.socket.connected)
|
||||||
return callback({
|
return callback({
|
||||||
@@ -55,7 +56,7 @@ export class CameraRunner {
|
|||||||
command,
|
command,
|
||||||
(response: { succeed: boolean; message?: string }) => {
|
(response: { succeed: boolean; message?: string }) => {
|
||||||
callback(response);
|
callback(response);
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,6 +78,18 @@ export class CameraRunner {
|
|||||||
this.message = message;
|
this.message = message;
|
||||||
this.error = error;
|
this.error = error;
|
||||||
this.state = state;
|
this.state = state;
|
||||||
|
|
||||||
|
this._Main.Status.update(
|
||||||
|
StatusType.CameraPC,
|
||||||
|
CameraPCStateColors[this.state],
|
||||||
|
message,
|
||||||
|
{
|
||||||
|
reboot:
|
||||||
|
state === 'FAILED' ||
|
||||||
|
state === 'DISCONNECTED' ||
|
||||||
|
state == 'CONNECTED',
|
||||||
|
},
|
||||||
|
);
|
||||||
this.broadcastState();
|
this.broadcastState();
|
||||||
|
|
||||||
if (
|
if (
|
||||||
@@ -95,11 +108,23 @@ export class CameraRunner {
|
|||||||
const poll = async () => {
|
const poll = async () => {
|
||||||
const data: ProcessStatus = await new Promise((resolve) => {
|
const data: ProcessStatus = await new Promise((resolve) => {
|
||||||
this.socket.emit('getStatus', (response: ProcessStatus) =>
|
this.socket.emit('getStatus', (response: ProcessStatus) =>
|
||||||
resolve(response)
|
resolve(response),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.processStatus = data;
|
this.processStatus = data;
|
||||||
|
this._Main.Status.update(
|
||||||
|
StatusType.CameraProcess,
|
||||||
|
CameraProcessStateColors[this.processStatus.state],
|
||||||
|
this.processStatus.message,
|
||||||
|
{
|
||||||
|
reboot:
|
||||||
|
this.processStatus.state === 'PROBLEM' ||
|
||||||
|
this.processStatus.state === 'STOPPED' ||
|
||||||
|
this.processStatus.state === 'RUNNING',
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
this.broadcastState();
|
this.broadcastState();
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -107,13 +132,24 @@ export class CameraRunner {
|
|||||||
this.processStatus.state = simpleStatus.state;
|
this.processStatus.state = simpleStatus.state;
|
||||||
this.processStatus.message = simpleStatus.message;
|
this.processStatus.message = simpleStatus.message;
|
||||||
this.processStatus.error = simpleStatus.error;
|
this.processStatus.error = simpleStatus.error;
|
||||||
|
this._Main.Status.update(
|
||||||
|
StatusType.CameraProcess,
|
||||||
|
CameraProcessStateColors[this.processStatus.state],
|
||||||
|
this.processStatus.message,
|
||||||
|
{
|
||||||
|
reboot:
|
||||||
|
this.processStatus.state === 'PROBLEM' ||
|
||||||
|
this.processStatus.state === 'STOPPED' ||
|
||||||
|
this.processStatus.state === 'RUNNING',
|
||||||
|
},
|
||||||
|
);
|
||||||
this.broadcastState();
|
this.broadcastState();
|
||||||
});
|
});
|
||||||
|
|
||||||
clearInterval(this.pollClock);
|
clearInterval(this.pollClock);
|
||||||
this.pollClock = setInterval(
|
this.pollClock = setInterval(
|
||||||
() => poll(),
|
() => poll(),
|
||||||
this._Main.Config.cameraRunner.pollInterval
|
this._Main.Config.cameraRunner.pollInterval,
|
||||||
);
|
);
|
||||||
poll();
|
poll();
|
||||||
}
|
}
|
||||||
@@ -146,7 +182,7 @@ export class CameraRunner {
|
|||||||
if (ip == null || port == null) {
|
if (ip == null || port == null) {
|
||||||
return this.setInfo(
|
return this.setInfo(
|
||||||
'Connection problem',
|
'Connection problem',
|
||||||
'Camera Runner WebSocket IP or port is not configured.'
|
'Camera Runner WebSocket IP or port is not configured.',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,7 +201,7 @@ export class CameraRunner {
|
|||||||
this.setInfo(
|
this.setInfo(
|
||||||
'Disconnected',
|
'Disconnected',
|
||||||
'Camera Runner was disconnected unexpectedly',
|
'Camera Runner was disconnected unexpectedly',
|
||||||
'DISCONNECTED'
|
'DISCONNECTED',
|
||||||
);
|
);
|
||||||
this.reconnect();
|
this.reconnect();
|
||||||
});
|
});
|
||||||
@@ -210,6 +246,19 @@ interface CameraRunnerStatus {
|
|||||||
|
|
||||||
export type ProcessStatusState = 'RUNNING' | 'STOPPED' | 'STARTING' | 'PROBLEM';
|
export type ProcessStatusState = 'RUNNING' | 'STOPPED' | 'STARTING' | 'PROBLEM';
|
||||||
|
|
||||||
|
export const CameraPCStateColors: Record<ServiceState, State> = {
|
||||||
|
CONNECTED: State.Green,
|
||||||
|
DISCONNECTED: State.Gray,
|
||||||
|
CONNECTING: State.Yellow,
|
||||||
|
FAILED: State.Red,
|
||||||
|
};
|
||||||
|
export const CameraProcessStateColors: Record<ProcessStatusState, State> = {
|
||||||
|
RUNNING: State.Green,
|
||||||
|
STOPPED: State.Gray,
|
||||||
|
STARTING: State.Yellow,
|
||||||
|
PROBLEM: State.Red,
|
||||||
|
};
|
||||||
|
|
||||||
interface ProcessStatusSimple {
|
interface ProcessStatusSimple {
|
||||||
state: ProcessStatusState;
|
state: ProcessStatusState;
|
||||||
message?: string;
|
message?: string;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ export class ConfigurationManager {
|
|||||||
if (!configExists) {
|
if (!configExists) {
|
||||||
await writeFile(
|
await writeFile(
|
||||||
configPath,
|
configPath,
|
||||||
JSON.stringify(DefaultConfiguration, null, 4)
|
JSON.stringify(DefaultConfiguration, null, 4),
|
||||||
);
|
);
|
||||||
this._Main.Config = DefaultConfiguration;
|
this._Main.Config = DefaultConfiguration;
|
||||||
console.log(PREFIX, 'Written default configuration');
|
console.log(PREFIX, 'Written default configuration');
|
||||||
@@ -36,7 +36,7 @@ export class ConfigurationManager {
|
|||||||
async validateConfig(config: Config): Promise<Config> {
|
async validateConfig(config: Config): Promise<Config> {
|
||||||
const normalizedConfig: Config = this.normalizeConfig(
|
const normalizedConfig: Config = this.normalizeConfig(
|
||||||
config,
|
config,
|
||||||
DefaultConfiguration
|
DefaultConfiguration,
|
||||||
);
|
);
|
||||||
const hasChanges =
|
const hasChanges =
|
||||||
JSON.stringify(config) !== JSON.stringify(normalizedConfig);
|
JSON.stringify(config) !== JSON.stringify(normalizedConfig);
|
||||||
@@ -47,7 +47,7 @@ export class ConfigurationManager {
|
|||||||
const configPath = join(this._Main.dataPath, 'config.json');
|
const configPath = join(this._Main.dataPath, 'config.json');
|
||||||
await writeFile(
|
await writeFile(
|
||||||
configPath,
|
configPath,
|
||||||
JSON.stringify(normalizedConfig, null, 4)
|
JSON.stringify(normalizedConfig, null, 4),
|
||||||
);
|
);
|
||||||
console.log(PREFIX, 'Configuration updated and saved');
|
console.log(PREFIX, 'Configuration updated and saved');
|
||||||
}
|
}
|
||||||
@@ -73,7 +73,7 @@ export class ConfigurationManager {
|
|||||||
!Array.isArray(template[0])
|
!Array.isArray(template[0])
|
||||||
) {
|
) {
|
||||||
return current.map((item) =>
|
return current.map((item) =>
|
||||||
this.normalizeConfig(item, template[0])
|
this.normalizeConfig(item, template[0]),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return current;
|
return current;
|
||||||
@@ -89,7 +89,7 @@ export class ConfigurationManager {
|
|||||||
if (template.hasOwnProperty(key)) {
|
if (template.hasOwnProperty(key)) {
|
||||||
result[key] = this.normalizeConfig(
|
result[key] = this.normalizeConfig(
|
||||||
current?.[key],
|
current?.[key],
|
||||||
template[key]
|
template[key],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -130,6 +130,7 @@ export interface ConfigUnity {
|
|||||||
|
|
||||||
heartbeatInterval: number;
|
heartbeatInterval: number;
|
||||||
calibrationImageInterval: number;
|
calibrationImageInterval: number;
|
||||||
|
launchOnStartup: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ConfigCameraRunner {
|
export interface ConfigCameraRunner {
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ export const DefaultConfiguration: Config = {
|
|||||||
|
|
||||||
heartbeatInterval: 1000,
|
heartbeatInterval: 1000,
|
||||||
calibrationImageInterval: 2000,
|
calibrationImageInterval: 2000,
|
||||||
|
launchOnStartup: true,
|
||||||
},
|
},
|
||||||
cameraRunner: {
|
cameraRunner: {
|
||||||
webSocket: {
|
webSocket: {
|
||||||
|
|||||||
113
src/Configuration/Timer.ts
Normal file
113
src/Configuration/Timer.ts
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
import { join } from 'path';
|
||||||
|
import { Main } from '../Main';
|
||||||
|
import { pathExists, readJSON, writeFile, writeJSON } from 'fs-extra';
|
||||||
|
import { StartOrigin } from '../Unity/UnityRunner';
|
||||||
|
|
||||||
|
const PREFIX = '[Main]';
|
||||||
|
export class Timer {
|
||||||
|
private _Main: Main;
|
||||||
|
|
||||||
|
private configPath: string;
|
||||||
|
|
||||||
|
private start: {
|
||||||
|
hour: number;
|
||||||
|
minute: number;
|
||||||
|
} = {
|
||||||
|
hour: null,
|
||||||
|
minute: null,
|
||||||
|
};
|
||||||
|
private end: {
|
||||||
|
hour: number;
|
||||||
|
minute: number;
|
||||||
|
} = {
|
||||||
|
hour: null,
|
||||||
|
minute: null,
|
||||||
|
};
|
||||||
|
|
||||||
|
constructor(Main: Main) {
|
||||||
|
this._Main = Main;
|
||||||
|
this.configPath = join(this._Main.dataPath, 'timer.json');
|
||||||
|
}
|
||||||
|
|
||||||
|
getState() {
|
||||||
|
return {
|
||||||
|
start: this.start,
|
||||||
|
end: this.end,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
setStart(data: { hour: number; minute: number }) {
|
||||||
|
this.start = data;
|
||||||
|
this._Main.WebServer.socket.emit('timer', this.getState());
|
||||||
|
this.save();
|
||||||
|
}
|
||||||
|
|
||||||
|
setEnd(data: { hour: number; minute: number }) {
|
||||||
|
this.end = data;
|
||||||
|
this._Main.WebServer.socket.emit('timer', this.getState());
|
||||||
|
this.save();
|
||||||
|
}
|
||||||
|
|
||||||
|
startClock() {
|
||||||
|
setInterval(() => {
|
||||||
|
const startTime = new Date();
|
||||||
|
startTime.setHours(this.start.hour, this.start.minute, 0, 0);
|
||||||
|
|
||||||
|
const endTime = new Date();
|
||||||
|
endTime.setHours(this.end.hour, this.end.minute, 0, 0);
|
||||||
|
|
||||||
|
const shouldBeStarted =
|
||||||
|
startTime <= new Date() && endTime > new Date();
|
||||||
|
|
||||||
|
if (shouldBeStarted) {
|
||||||
|
if (
|
||||||
|
this._Main.UnityRunner.state !== 'RUNNING' &&
|
||||||
|
this._Main.UnityRunner.state !== 'STARTING'
|
||||||
|
) {
|
||||||
|
console.log(PREFIX, 'Starting Unity');
|
||||||
|
this._Main.UnityRunner.start(StartOrigin.Timer);
|
||||||
|
} else if (
|
||||||
|
this._Main.UnityRunner.startOrigin !== StartOrigin.Timer
|
||||||
|
) {
|
||||||
|
console.log(PREFIX, 'Already running');
|
||||||
|
this._Main.UnityRunner.startOrigin = StartOrigin.Timer;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (
|
||||||
|
this._Main.UnityRunner.state === 'RUNNING' &&
|
||||||
|
this._Main.UnityRunner.startOrigin === StartOrigin.Timer
|
||||||
|
) {
|
||||||
|
console.log(PREFIX, 'Stopping Unity');
|
||||||
|
this._Main.UnityRunner.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 5000);
|
||||||
|
}
|
||||||
|
|
||||||
|
async load() {
|
||||||
|
console.log(PREFIX, 'Loading timer configuration...');
|
||||||
|
const exists = await pathExists(this.configPath);
|
||||||
|
if (!exists) {
|
||||||
|
this.save();
|
||||||
|
return this.startClock();
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = await readJSON(this.configPath);
|
||||||
|
this.start = data.start;
|
||||||
|
this.end = data.end;
|
||||||
|
|
||||||
|
this.startClock();
|
||||||
|
}
|
||||||
|
|
||||||
|
private _save: NodeJS.Timeout;
|
||||||
|
async save() {
|
||||||
|
if (this._save) clearTimeout(this._save);
|
||||||
|
|
||||||
|
this._save = setTimeout(async () => {
|
||||||
|
writeFile(
|
||||||
|
this.configPath,
|
||||||
|
JSON.stringify({ start: this.start, end: this.end }, null, 4),
|
||||||
|
);
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
34
src/Main.ts
34
src/Main.ts
@@ -6,20 +6,26 @@ import {
|
|||||||
ConfigurationManager,
|
ConfigurationManager,
|
||||||
} from './Configuration/ConfigurationManager';
|
} from './Configuration/ConfigurationManager';
|
||||||
import { CameraRunner } from './CameraRunner';
|
import { CameraRunner } from './CameraRunner';
|
||||||
import { UnityRunner } from './Unity/UnityRunner';
|
import { StartOrigin, UnityRunner } from './Unity/UnityRunner';
|
||||||
import { UnityWebSocket } from './Unity/UnityWebSocket';
|
import { UnityWebSocket } from './Unity/UnityWebSocket';
|
||||||
import { TwilioHandler } from './Twilio';
|
import { TwilioHandler } from './Twilio';
|
||||||
import { delay } from './Utils';
|
import { delay } from './Utils';
|
||||||
import * as ping from 'ping';
|
import * as ping from 'ping';
|
||||||
import { shutdown } from './Shutdown';
|
import { shutdown } from './Shutdown';
|
||||||
|
import { Timer } from './Configuration/Timer';
|
||||||
|
import { Status } from './Status';
|
||||||
|
import { AudioChecker } from './Audio';
|
||||||
|
|
||||||
const PREFIX = '[Main]';
|
const PREFIX = '[Main]';
|
||||||
export class Main {
|
export class Main {
|
||||||
dataPath = join(homedir(), 'MorphixProductions', 'NTSHControl');
|
dataPath = join(homedir(), 'MorphixProductions', 'NTSHControl');
|
||||||
|
|
||||||
ConfigurationManager = new ConfigurationManager(this);
|
ConfigurationManager = new ConfigurationManager(this);
|
||||||
|
Timer = new Timer(this);
|
||||||
|
Status = new Status(this);
|
||||||
WebServer = new WebServer(this);
|
WebServer = new WebServer(this);
|
||||||
Twilio = new TwilioHandler(this);
|
Twilio = new TwilioHandler(this);
|
||||||
|
Audio = new AudioChecker(this);
|
||||||
|
|
||||||
CameraRunner = new CameraRunner(this);
|
CameraRunner = new CameraRunner(this);
|
||||||
UnityRunner = new UnityRunner(this);
|
UnityRunner = new UnityRunner(this);
|
||||||
@@ -35,11 +41,23 @@ export class Main {
|
|||||||
await this.WebServer.listen();
|
await this.WebServer.listen();
|
||||||
await this.Twilio.load();
|
await this.Twilio.load();
|
||||||
|
|
||||||
|
await this.Audio.waitForDevice();
|
||||||
|
|
||||||
await this.CameraRunner.connect();
|
await this.CameraRunner.connect();
|
||||||
|
|
||||||
setTimeout(() => {
|
await this.Timer.load();
|
||||||
this.UnityRunner.start();
|
|
||||||
}, this.Config.unity.executable.startUpDelay ?? 0);
|
if ((this.Config.unity.launchOnStartup ?? true) === true)
|
||||||
|
setTimeout(() => {
|
||||||
|
this.UnityRunner.start(StartOrigin.Startup);
|
||||||
|
}, this.Config.unity.executable.startUpDelay ?? 0);
|
||||||
|
else {
|
||||||
|
this.UnityRunner.setInfo(
|
||||||
|
'Not set to launch on startup. Waiting for timer or manual start...',
|
||||||
|
null,
|
||||||
|
'STOPPED',
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async restart() {
|
async restart() {
|
||||||
@@ -55,11 +73,11 @@ export class Main {
|
|||||||
if (!response.succeed) {
|
if (!response.succeed) {
|
||||||
console.error(
|
console.error(
|
||||||
'Failed to reboot CameraRunner:',
|
'Failed to reboot CameraRunner:',
|
||||||
response.message
|
response.message,
|
||||||
);
|
);
|
||||||
this.Twilio.sendError(
|
this.Twilio.sendError(
|
||||||
'CameraRunner',
|
'CameraRunner',
|
||||||
`Failed to reboot CameraRunner: ${response.message}`
|
`Failed to reboot CameraRunner: ${response.message}`,
|
||||||
);
|
);
|
||||||
resolve(false);
|
resolve(false);
|
||||||
} else {
|
} else {
|
||||||
@@ -67,7 +85,7 @@ export class Main {
|
|||||||
this.Twilio.sendError('CameraRunner', null);
|
this.Twilio.sendError('CameraRunner', null);
|
||||||
resolve(true);
|
resolve(true);
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
if (!succeed) return;
|
if (!succeed) return;
|
||||||
@@ -75,7 +93,7 @@ export class Main {
|
|||||||
await delay(5000);
|
await delay(5000);
|
||||||
|
|
||||||
console.log('Starting UnityRunner...');
|
console.log('Starting UnityRunner...');
|
||||||
await this.UnityRunner.start();
|
await this.UnityRunner.start(this.UnityRunner.startOrigin);
|
||||||
|
|
||||||
console.log('Restart complete.');
|
console.log('Restart complete.');
|
||||||
}
|
}
|
||||||
|
|||||||
156
src/Status.ts
Normal file
156
src/Status.ts
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
import { Main } from './Main';
|
||||||
|
import { StartOrigin } from './Unity/UnityRunner';
|
||||||
|
import { delay } from './Utils';
|
||||||
|
|
||||||
|
export class Status {
|
||||||
|
private _Main: Main;
|
||||||
|
|
||||||
|
states: Map<StatusType, StatusEntry> = new Map();
|
||||||
|
|
||||||
|
constructor(Main: Main) {
|
||||||
|
this._Main = Main;
|
||||||
|
|
||||||
|
this.ensure();
|
||||||
|
this.startClock();
|
||||||
|
}
|
||||||
|
|
||||||
|
update(
|
||||||
|
type: StatusType,
|
||||||
|
state: State,
|
||||||
|
message: string,
|
||||||
|
buttons?: { reboot?: boolean; start?: boolean; stop?: boolean },
|
||||||
|
) {
|
||||||
|
this.states.set(type, { state, message, buttons });
|
||||||
|
|
||||||
|
this._Main.WebServer.socket.emit('status', this.getState());
|
||||||
|
}
|
||||||
|
|
||||||
|
reboot(type: StatusType) {
|
||||||
|
switch (type) {
|
||||||
|
case StatusType.CameraPC: {
|
||||||
|
this._Main.CameraRunner.sendCommand(
|
||||||
|
'reboot',
|
||||||
|
(response: { succeed: boolean; message?: string }) => {
|
||||||
|
console.log('CameraRunner reboot response:', response);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
case StatusType.CameraProcess: {
|
||||||
|
this._Main.CameraRunner.sendCommand(
|
||||||
|
'restart',
|
||||||
|
(response: { succeed: boolean; message?: string }) => {
|
||||||
|
console.log('CameraRunner restart response:', response);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
case StatusType.CameraUnityStream: {
|
||||||
|
this._Main.CameraRunner.sendCommand(
|
||||||
|
'restart',
|
||||||
|
(response: { succeed: boolean; message?: string }) => {
|
||||||
|
console.log('CameraRunner restart response:', response);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
this._Main.UnityRunner.restart(StartOrigin.Manual);
|
||||||
|
}
|
||||||
|
case StatusType.UnityBuild: {
|
||||||
|
this._Main.UnityRunner.restart(StartOrigin.Manual);
|
||||||
|
}
|
||||||
|
case StatusType.ReplayFunction: {
|
||||||
|
console.log(
|
||||||
|
'ReplayFunction reboot requested. Not implemented.',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
start(type: StatusType) {
|
||||||
|
switch (type) {
|
||||||
|
case StatusType.UnityBuild: {
|
||||||
|
this._Main.UnityRunner.requestStart(StartOrigin.Manual);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stop(type: StatusType) {
|
||||||
|
switch (type) {
|
||||||
|
case StatusType.UnityBuild: {
|
||||||
|
this._Main.UnityRunner.requestStop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getState() {
|
||||||
|
const state = {};
|
||||||
|
this.states.forEach((value, key) => {
|
||||||
|
state[key] = value;
|
||||||
|
});
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
private startClock() {
|
||||||
|
let hadInvalidLastRound: boolean = false;
|
||||||
|
setInterval(() => {
|
||||||
|
let hasInvalid = false;
|
||||||
|
this.states.forEach((state, key) => {
|
||||||
|
if (state.state === State.Red) hasInvalid = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (hasInvalid && !hadInvalidLastRound) {
|
||||||
|
hadInvalidLastRound = true;
|
||||||
|
console.warn(
|
||||||
|
'One ore more status entries are invalid, waiting to see if they recover...',
|
||||||
|
);
|
||||||
|
} else if (hasInvalid && hadInvalidLastRound) {
|
||||||
|
console.error(
|
||||||
|
'One ore more status entries are still invalid after 5 seconds, restarting system.',
|
||||||
|
);
|
||||||
|
this._Main.Twilio.sendError(
|
||||||
|
'Status',
|
||||||
|
'One ore more status entries are still invalid after 5 seconds, restarting system.',
|
||||||
|
);
|
||||||
|
this._Main.restart();
|
||||||
|
} else {
|
||||||
|
this._Main.Twilio.sendError('Status', null);
|
||||||
|
hadInvalidLastRound = false;
|
||||||
|
}
|
||||||
|
}, 5000);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ensure() {
|
||||||
|
for (const type in StatusType) {
|
||||||
|
if (!this.states.has(StatusType[type]))
|
||||||
|
this.states.set(StatusType[type], {
|
||||||
|
state: State.Gray,
|
||||||
|
message: 'Loading...',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private doLog() {
|
||||||
|
console.clear();
|
||||||
|
this.states.forEach((state, key) => {
|
||||||
|
console.log(`[${key}] ${state.state} - ${state.message}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface StatusEntry {
|
||||||
|
state: State;
|
||||||
|
message: string;
|
||||||
|
buttons?: { reboot?: boolean; start?: boolean; stop?: boolean };
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum State {
|
||||||
|
Green = 'GREEN',
|
||||||
|
Yellow = 'YELLOW',
|
||||||
|
Red = 'RED',
|
||||||
|
Gray = 'GRAY',
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum StatusType {
|
||||||
|
CameraPC = 'CAMERAPC',
|
||||||
|
CameraProcess = 'CAMERAPROCESS',
|
||||||
|
CameraUnityStream = 'CAMERAUNITYSTREAM',
|
||||||
|
UnityBuild = 'UNITYBUILD',
|
||||||
|
ReplayFunction = 'REPLAYFUNCTION',
|
||||||
|
}
|
||||||
@@ -44,7 +44,7 @@ export class TwilioHandler {
|
|||||||
|
|
||||||
this.client = require('twilio')(
|
this.client = require('twilio')(
|
||||||
this._Main.Config.twilio.accountSid,
|
this._Main.Config.twilio.accountSid,
|
||||||
this._Main.Config.twilio.authToken
|
this._Main.Config.twilio.authToken,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,14 +77,13 @@ export class TwilioHandler {
|
|||||||
console.log(PREFIX, `Sending to Twilio:\n`, errorMessage);
|
console.log(PREFIX, `Sending to Twilio:\n`, errorMessage);
|
||||||
|
|
||||||
const promises = this._Main.Config.twilio.toNumbers.map(
|
const promises = this._Main.Config.twilio.toNumbers.map(
|
||||||
(toNumber) => this.sendMessage(toNumber, errorMessage)
|
(toNumber) => this.sendMessage(toNumber, errorMessage),
|
||||||
);
|
);
|
||||||
await Promise.all(promises);
|
await Promise.all(promises);
|
||||||
}, this._Main.Config.twilio.aggregateTimeout);
|
}, this._Main.Config.twilio.aggregateTimeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
sendMessage(to: string, message: string) {
|
sendMessage(to: string, message: string) {
|
||||||
return;
|
|
||||||
return new Promise<boolean>((resolve) => {
|
return new Promise<boolean>((resolve) => {
|
||||||
this.client.messages
|
this.client.messages
|
||||||
.create({
|
.create({
|
||||||
@@ -104,4 +103,9 @@ export class TwilioHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type TwilioCategories = 'CameraRunner' | 'UnityRunner' | 'UnityWebSocket';
|
type TwilioCategories =
|
||||||
|
| 'CameraRunner'
|
||||||
|
| 'UnityRunner'
|
||||||
|
| 'UnityWebSocket'
|
||||||
|
| 'Status'
|
||||||
|
| 'Audio';
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
import { pathExistsSync } from 'fs-extra';
|
import { pathExistsSync } from 'fs-extra';
|
||||||
import { ChildProcess, exec, spawn } from 'child_process';
|
import { ChildProcess, spawn } from 'child_process';
|
||||||
import { delay } from '../Utils';
|
import { delay } from '../Utils';
|
||||||
import { Main } from '../Main';
|
import { Main } from '../Main';
|
||||||
|
import { ProcessStatusState } from '../CameraRunner';
|
||||||
|
import { StatusType } from '../Status';
|
||||||
|
|
||||||
const PREFIX = '[UnityRunner]';
|
const PREFIX = '[UnityRunner]';
|
||||||
|
|
||||||
@@ -11,6 +13,8 @@ export class UnityRunner {
|
|||||||
private _Main: Main;
|
private _Main: Main;
|
||||||
|
|
||||||
state: UnityRunnerState;
|
state: UnityRunnerState;
|
||||||
|
startOrigin: StartOrigin;
|
||||||
|
|
||||||
message?: string = 'Awaiting startup delay...';
|
message?: string = 'Awaiting startup delay...';
|
||||||
error?: string;
|
error?: string;
|
||||||
|
|
||||||
@@ -34,11 +38,11 @@ export class UnityRunner {
|
|||||||
|
|
||||||
switch (command) {
|
switch (command) {
|
||||||
case 'restart':
|
case 'restart':
|
||||||
return callback(this.requestRestart());
|
return callback(this.requestRestart(StartOrigin.Manual));
|
||||||
case 'stop':
|
case 'stop':
|
||||||
return callback(this.requestStop());
|
return callback(this.requestStop());
|
||||||
case 'start':
|
case 'start':
|
||||||
return callback(this.requestStart());
|
return callback(this.requestStart(StartOrigin.Manual));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,7 +54,10 @@ export class UnityRunner {
|
|||||||
}, 3000);
|
}, 3000);
|
||||||
}
|
}
|
||||||
|
|
||||||
requestRestart(): { succeed: boolean; message?: string } {
|
requestRestart(startOrigin: StartOrigin): {
|
||||||
|
succeed: boolean;
|
||||||
|
message?: string;
|
||||||
|
} {
|
||||||
if (this.state !== 'RUNNING')
|
if (this.state !== 'RUNNING')
|
||||||
return {
|
return {
|
||||||
succeed: false,
|
succeed: false,
|
||||||
@@ -58,7 +65,7 @@ export class UnityRunner {
|
|||||||
'Cannot restart when process is not running. It is probably restarting already.',
|
'Cannot restart when process is not running. It is probably restarting already.',
|
||||||
};
|
};
|
||||||
|
|
||||||
this.restart(true);
|
this.restart(startOrigin, true);
|
||||||
return { succeed: true };
|
return { succeed: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,14 +81,17 @@ export class UnityRunner {
|
|||||||
return { succeed: true };
|
return { succeed: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
requestStart(): { succeed: boolean; message?: string } {
|
requestStart(startOrigin: StartOrigin): {
|
||||||
|
succeed: boolean;
|
||||||
|
message?: string;
|
||||||
|
} {
|
||||||
if (this.state !== 'STOPPED')
|
if (this.state !== 'STOPPED')
|
||||||
return {
|
return {
|
||||||
succeed: false,
|
succeed: false,
|
||||||
message: 'Cannot start when process is already running.',
|
message: 'Cannot start when process is already running.',
|
||||||
};
|
};
|
||||||
|
|
||||||
this.start();
|
this.start(startOrigin);
|
||||||
return { succeed: true };
|
return { succeed: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,11 +102,21 @@ export class UnityRunner {
|
|||||||
setInfo(
|
setInfo(
|
||||||
message: string,
|
message: string,
|
||||||
error: string,
|
error: string,
|
||||||
state: UnityRunnerState = 'PROBLEM'
|
state: UnityRunnerState = 'PROBLEM',
|
||||||
) {
|
) {
|
||||||
this.message = message;
|
this.message = message;
|
||||||
this.error = error;
|
this.error = error;
|
||||||
this.state = state;
|
this.state = state;
|
||||||
|
this._Main.Status.update(
|
||||||
|
StatusType.UnityBuild,
|
||||||
|
UnityBuildStateColors[state],
|
||||||
|
message ?? error ?? '',
|
||||||
|
{
|
||||||
|
reboot: state === 'PROBLEM' || state === 'RUNNING',
|
||||||
|
start: state === 'STOPPED',
|
||||||
|
stop: state === 'RUNNING',
|
||||||
|
},
|
||||||
|
);
|
||||||
this.broadcastState();
|
this.broadcastState();
|
||||||
|
|
||||||
if (error != null) this._Main.Twilio.sendError('UnityRunner', error);
|
if (error != null) this._Main.Twilio.sendError('UnityRunner', error);
|
||||||
@@ -104,7 +124,7 @@ export class UnityRunner {
|
|||||||
this.output.current.push(
|
this.output.current.push(
|
||||||
`[${new Date().toLocaleTimeString('nl-NL')}] [System] [${state}] ${
|
`[${new Date().toLocaleTimeString('nl-NL')}] [System] [${state}] ${
|
||||||
message ?? error
|
message ?? error
|
||||||
}`
|
}`,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (state == 'PROBLEM' || state == 'STOPPED')
|
if (state == 'PROBLEM' || state == 'STOPPED')
|
||||||
@@ -123,7 +143,7 @@ export class UnityRunner {
|
|||||||
this.setInfo(
|
this.setInfo(
|
||||||
'Requested quit through WebSocket...',
|
'Requested quit through WebSocket...',
|
||||||
null,
|
null,
|
||||||
'STARTING'
|
'STARTING',
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
this.process.kill('SIGTERM');
|
this.process.kill('SIGTERM');
|
||||||
@@ -161,7 +181,7 @@ export class UnityRunner {
|
|||||||
}
|
}
|
||||||
|
|
||||||
restartTriggered: boolean = false;
|
restartTriggered: boolean = false;
|
||||||
async restart(instant: boolean = false) {
|
async restart(origin: StartOrigin, instant: boolean = false) {
|
||||||
if (this.restartTriggered) return;
|
if (this.restartTriggered) return;
|
||||||
this.restartTriggered = true;
|
this.restartTriggered = true;
|
||||||
|
|
||||||
@@ -170,6 +190,7 @@ export class UnityRunner {
|
|||||||
clearInterval(this.statusClock);
|
clearInterval(this.statusClock);
|
||||||
|
|
||||||
this.startTime = -1;
|
this.startTime = -1;
|
||||||
|
this.startOrigin = null;
|
||||||
this.broadcastState();
|
this.broadcastState();
|
||||||
|
|
||||||
if (!instant) await delay(2000);
|
if (!instant) await delay(2000);
|
||||||
@@ -191,10 +212,10 @@ export class UnityRunner {
|
|||||||
|
|
||||||
await delay(10000);
|
await delay(10000);
|
||||||
}
|
}
|
||||||
await this.start();
|
await this.start(this.startOrigin);
|
||||||
}
|
}
|
||||||
|
|
||||||
async start() {
|
async start(origin: StartOrigin) {
|
||||||
if (this.output.current.length > 0) {
|
if (this.output.current.length > 0) {
|
||||||
this.output.last = [...this.output.current];
|
this.output.last = [...this.output.current];
|
||||||
this.output.current = [];
|
this.output.current = [];
|
||||||
@@ -211,7 +232,7 @@ export class UnityRunner {
|
|||||||
if (path == null || !pathExistsSync(path)) {
|
if (path == null || !pathExistsSync(path)) {
|
||||||
this.setInfo(
|
this.setInfo(
|
||||||
'Executable problem',
|
'Executable problem',
|
||||||
`Executable path is not set or does not exist: ${path}`
|
`Executable path is not set or does not exist: ${path}`,
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -221,7 +242,7 @@ export class UnityRunner {
|
|||||||
this.setInfo(
|
this.setInfo(
|
||||||
'Waiting for CameraRunner to connect...',
|
'Waiting for CameraRunner to connect...',
|
||||||
null,
|
null,
|
||||||
'STARTING'
|
'STARTING',
|
||||||
);
|
);
|
||||||
var c = setInterval(() => {
|
var c = setInterval(() => {
|
||||||
if (this._Main.CameraRunner.state !== 'CONNECTED') return;
|
if (this._Main.CameraRunner.state !== 'CONNECTED') return;
|
||||||
@@ -236,7 +257,7 @@ export class UnityRunner {
|
|||||||
this.setInfo(
|
this.setInfo(
|
||||||
'Waiting for CameraRunner process to start...',
|
'Waiting for CameraRunner process to start...',
|
||||||
null,
|
null,
|
||||||
'STARTING'
|
'STARTING',
|
||||||
);
|
);
|
||||||
var c = setInterval(() => {
|
var c = setInterval(() => {
|
||||||
if (
|
if (
|
||||||
@@ -259,7 +280,7 @@ export class UnityRunner {
|
|||||||
this._Main.Config.unity.executable.arguments,
|
this._Main.Config.unity.executable.arguments,
|
||||||
{
|
{
|
||||||
stdio: 'pipe',
|
stdio: 'pipe',
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
this.process.on('exit', (code, signal) => {
|
this.process.on('exit', (code, signal) => {
|
||||||
@@ -267,13 +288,13 @@ export class UnityRunner {
|
|||||||
this.setInfo(
|
this.setInfo(
|
||||||
'Process exited',
|
'Process exited',
|
||||||
`Process exited with code ${code} and signal ${signal}`,
|
`Process exited with code ${code} and signal ${signal}`,
|
||||||
'PROBLEM'
|
'PROBLEM',
|
||||||
);
|
);
|
||||||
this.restart();
|
this.restart(this.startOrigin);
|
||||||
});
|
});
|
||||||
this.process.on('error', (err) => {
|
this.process.on('error', (err) => {
|
||||||
this.setInfo('Process error', err.message);
|
this.setInfo('Process error', err.message);
|
||||||
this.restart();
|
this.restart(this.startOrigin);
|
||||||
});
|
});
|
||||||
this.process.stdout?.on('data', (data) => {
|
this.process.stdout?.on('data', (data) => {
|
||||||
const lines = data
|
const lines = data
|
||||||
@@ -283,7 +304,7 @@ export class UnityRunner {
|
|||||||
.filter((line) => line.length > 0);
|
.filter((line) => line.length > 0);
|
||||||
lines.forEach((line) => {
|
lines.forEach((line) => {
|
||||||
const formattedLine = `[${new Date().toLocaleTimeString(
|
const formattedLine = `[${new Date().toLocaleTimeString(
|
||||||
'nl-NL'
|
'nl-NL',
|
||||||
)}] [${fileName}] ${line}`;
|
)}] [${fileName}] ${line}`;
|
||||||
if (LOG_OUTPUT) console.log(PREFIX, formattedLine);
|
if (LOG_OUTPUT) console.log(PREFIX, formattedLine);
|
||||||
this.output.current.push(formattedLine);
|
this.output.current.push(formattedLine);
|
||||||
@@ -297,12 +318,13 @@ export class UnityRunner {
|
|||||||
.filter((line) => line.length > 0);
|
.filter((line) => line.length > 0);
|
||||||
lines.forEach((line) => {
|
lines.forEach((line) => {
|
||||||
const formattedLine = `[${new Date().toLocaleTimeString(
|
const formattedLine = `[${new Date().toLocaleTimeString(
|
||||||
'nl-NL'
|
'nl-NL',
|
||||||
)}] [${fileName}] [ERROR] ${line}`;
|
)}] [${fileName}] [ERROR] ${line}`;
|
||||||
if (LOG_OUTPUT) console.error(PREFIX, formattedLine);
|
if (LOG_OUTPUT) console.error(PREFIX, formattedLine);
|
||||||
this.output.current.push(formattedLine);
|
this.output.current.push(formattedLine);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
this.startOrigin = origin;
|
||||||
this.startStatusClock();
|
this.startStatusClock();
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (
|
if (
|
||||||
@@ -340,4 +362,24 @@ interface UnityRunnerStatus {
|
|||||||
output: { current: string[]; last: string[] };
|
output: { current: string[]; last: string[] };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum State {
|
||||||
|
Green = 'GREEN',
|
||||||
|
Yellow = 'YELLOW',
|
||||||
|
Red = 'RED',
|
||||||
|
Gray = 'GRAY',
|
||||||
|
}
|
||||||
|
|
||||||
|
export const UnityBuildStateColors: Record<ProcessStatusState, State> = {
|
||||||
|
RUNNING: State.Green,
|
||||||
|
STOPPED: State.Gray,
|
||||||
|
STARTING: State.Yellow,
|
||||||
|
PROBLEM: State.Red,
|
||||||
|
};
|
||||||
|
|
||||||
export type UnityRunnerState = 'RUNNING' | 'STOPPED' | 'STARTING' | 'PROBLEM';
|
export type UnityRunnerState = 'RUNNING' | 'STOPPED' | 'STARTING' | 'PROBLEM';
|
||||||
|
|
||||||
|
export enum StartOrigin {
|
||||||
|
Timer = 'TIMER',
|
||||||
|
Manual = 'MANUAL',
|
||||||
|
Startup = 'STARTUP',
|
||||||
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user