From c9dc5eb2f5c470a79cf095f2bd4122b861133d4b Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Sun, 31 Dec 2023 12:02:24 +0100 Subject: [PATCH 1/3] Added ability to start/stop client --- install.bat | 2 ++ manager/DCS.openbeta.log | 32 ++++++++++++++++++++++++++++++ manager/ejs/instances.ejs | 6 +++++- manager/javascripts/dcsinstance.js | 29 +++++++++++++++++++++------ manager/javascripts/instances.js | 21 +++++++++++++++----- manager/javascripts/manager.js | 3 ++- manager/main.js | 2 ++ manager/stylesheets/style.css | 3 ++- 8 files changed, 84 insertions(+), 14 deletions(-) create mode 100644 manager/DCS.openbeta.log diff --git a/install.bat b/install.bat index 8aee2935..94e1b3b9 100644 --- a/install.bat +++ b/install.bat @@ -1,5 +1,7 @@ @echo OFF +SET PATH=%PATH%;%WINDIR%\System32;%WINDIR%\System32\WindowsPowerShell\v1.0; + WHERE /q powershell if %ERRORLEVEL% NEQ 0 ( .\scripts\install.bat diff --git a/manager/DCS.openbeta.log b/manager/DCS.openbeta.log new file mode 100644 index 00000000..9cc04389 --- /dev/null +++ b/manager/DCS.openbeta.log @@ -0,0 +1,32 @@ +^CTerminare il processo batch (S/N)? +Microsoft (R) Windows Script Host Versione 5.812 +Copyright (C) Microsoft Corporation. Tutti i diritti riservati. + +C:\Users\Davide Passoni\Documents\DCSOlympus\client\client.vbs(1, 1) Errore di run-time di Microsoft VBScript: Indice non incluso nell'intervallo + +Microsoft (R) Windows Script Host Versione 5.812 +Copyright (C) Microsoft Corporation. Tutti i diritti riservati. + +C:\Users\Davide Passoni\Documents\DCSOlympus\client\client.vbs(1, 1) Errore di run-time di Microsoft VBScript: Indice non incluso nell'intervallo + +Microsoft (R) Windows Script Host Versione 5.812 +Copyright (C) Microsoft Corporation. Tutti i diritti riservati. + +Microsoft (R) Windows Script Host Versione 5.812 +Copyright (C) Microsoft Corporation. Tutti i diritti riservati. + +Microsoft (R) Windows Script Host Versione 5.812 +Copyright (C) Microsoft Corporation. Tutti i diritti riservati. + +Microsoft (R) Windows Script Host Versione 5.812 +Copyright (C) Microsoft Corporation. Tutti i diritti riservati. + +Microsoft (R) Windows Script Host Versione 5.812 +Copyright (C) Microsoft Corporation. Tutti i diritti riservati. + +Microsoft (R) Windows Script Host Versione 5.812 +Copyright (C) Microsoft Corporation. Tutti i diritti riservati. + +Microsoft (R) Windows Script Host Versione 5.812 +Copyright (C) Microsoft Corporation. Tutti i diritti riservati. + diff --git a/manager/ejs/instances.ejs b/manager/ejs/instances.ejs index 7376bb9f..0f81c636 100644 --- a/manager/ejs/instances.ejs +++ b/manager/ejs/instances.ejs @@ -104,6 +104,10 @@ font-weight: normal; } + #manager-instances .start-stop-client { + margin-right: auto; + } +
@@ -163,7 +167,7 @@
Uninstall
<% } else { %>
Start server
- +
Start client
<% } %>
diff --git a/manager/javascripts/dcsinstance.js b/manager/javascripts/dcsinstance.js index 973d44a8..69fc812f 100644 --- a/manager/javascripts/dcsinstance.js +++ b/manager/javascripts/dcsinstance.js @@ -124,12 +124,12 @@ class DCSInstance { instanceDiv.querySelector(".load .data").innerTexr = this.load; } - instanceDiv.querySelector(".start-stop-server").innerText = this.webserverOnline ? "Stop server" : "Start server"; + instanceDiv.querySelector(".start-stop-server").innerText = this.webserverOnline ? "Stop" : "Start server"; + instanceDiv.querySelector(".start-stop-client").innerText = this.webserverOnline ? "Open in browser" : "Start client"; } } } } - }, 1000); } @@ -262,7 +262,7 @@ class DCSInstance { console.log(`Starting server for instance at ${this.folder}`) const out = fs.openSync(`./${this.name}.log`, 'a'); const err = fs.openSync(`./${this.name}.log`, 'a'); - const sub = spawn('npm.cmd', ['run', 'start', '--', '--config', path.join(this.folder, "Config", "olympus.json")], { + const sub = spawn('cscript.exe', ['server.vbs', path.join(this.folder, "Config", "olympus.json")], { detached: true, cwd: "../client", stdio: ['ignore', out, err] @@ -271,7 +271,20 @@ class DCSInstance { sub.unref(); } - stopServer() { + startClient() { + console.log(`Starting client for instance at ${this.folder}`) + const out = fs.openSync(`./${this.name}.log`, 'a'); + const err = fs.openSync(`./${this.name}.log`, 'a'); + const sub = spawn('cscript.exe', ['client.vbs', path.join(this.folder, "Config", "olympus.json")], { + detached: true, + cwd: "../client", + stdio: ['ignore', out, err] + }); + + sub.unref(); + } + + stop() { find('port', this.clientPort) .then((list) => { if (list.length !== 1) { @@ -279,13 +292,17 @@ class DCSInstance { } else { if (list[0].name.includes("node.exe")) { console.log(`Killing process ${list[0].name}`) - process.kill(list[0].pid); + try { + process.kill(list[0].pid); + process.kill(list[0].ppid); + } catch (e) { + process.kill(list[0].pid); + } } else { console.log(list[0]) console.error(`The process listening on the specified port has an incorrect name: ${list[0].name}`) } - } }, () => { console.error("Error retrieving list of processes") diff --git a/manager/javascripts/instances.js b/manager/javascripts/instances.js index b90fca12..9da58f5c 100644 --- a/manager/javascripts/instances.js +++ b/manager/javascripts/instances.js @@ -2,6 +2,7 @@ const DCSInstance = require("./dcsinstance"); const ManagerPage = require("./managerpage"); const ejs = require('ejs'); const { showErrorPopup } = require("./popup"); +const { exec } = require("child_process"); class InstancesPage extends ManagerPage { onCancelClicked; @@ -25,9 +26,14 @@ class InstancesPage extends ManagerPage { uninstallButtons[i].onclick = (e) => {this.onUninstallClicked(e);} } - var startButtons = this.element.querySelectorAll(".start-stop-server"); - for (let i = 0; i < startButtons.length; i++) { - startButtons[i].onclick = (e) => {this.onStartStopClicked(e);} + var startStopServerButtons = this.element.querySelectorAll(".start-stop-server"); + for (let i = 0; i < startStopServerButtons.length; i++) { + startStopServerButtons[i].onclick = (e) => {this.onStartStopServerClicked(e);} + } + + var startStopClientButtons = this.element.querySelectorAll(".start-stop-client"); + for (let i = 0; i < startStopClientButtons.length; i++) { + startStopClientButtons[i].onclick = (e) => {this.onStartStopClientClicked(e);} } this.element.querySelector(".cancel").addEventListener("click", (e) => this.onCancelClicked(e)); @@ -38,9 +44,14 @@ class InstancesPage extends ManagerPage { this.setSelectedInstance((await DCSInstance.getInstances()).find((instance) => {return instance.folder === e.target.closest('.option').dataset.folder})); } - async onStartStopClicked(e) { + async onStartStopServerClicked(e) { var instance = (await DCSInstance.getInstances()).find((instance) => {return instance.folder === e.target.closest('.option').dataset.folder}); - instance.webserverOnline? instance.stopServer(): instance.startServer(); + instance.webserverOnline? instance.stop(): instance.startServer(); + } + + async onStartStopClientClicked(e) { + var instance = (await DCSInstance.getInstances()).find((instance) => {return instance.folder === e.target.closest('.option').dataset.folder}); + instance.webserverOnline? exec(`start http://localhost:${instance.clientPort}`): instance.startClient(); } async onUninstallClicked(e) { diff --git a/manager/javascripts/manager.js b/manager/javascripts/manager.js index d7fe0012..dc72e93d 100644 --- a/manager/javascripts/manager.js +++ b/manager/javascripts/manager.js @@ -6,7 +6,7 @@ const ResultPage = require('./result'); const InstancesPage = require('./instances'); const DCSInstance = require('./dcsinstance'); -const { showErrorPopup } = require('./popup'); +const { showErrorPopup, showWaitPopup } = require('./popup'); const { fixInstances } = require('./filesystem'); class Manager { @@ -23,6 +23,7 @@ class Manager { return instance.installed && instance.error; })) { showErrorPopup("One or more Olympus instances are corrupted or need updating. Press Close to fix this.", async () => { + showWaitPopup("Please wait while your instances are being fixed.") fixInstances(instances.filter((instance) => { return instance.installed && instance.error; })).then( diff --git a/manager/main.js b/manager/main.js index f8ccc876..526a5f48 100644 --- a/manager/main.js +++ b/manager/main.js @@ -5,6 +5,8 @@ const path = require('path'); let window; +process.env['PATH'] = process.env['PATH'] + "%WINDIR%\\System32;" + function createWindow() { const window = new electronBrowserWindow({ width: 1500, diff --git a/manager/stylesheets/style.css b/manager/stylesheets/style.css index 5a691743..44d2b0ad 100644 --- a/manager/stylesheets/style.css +++ b/manager/stylesheets/style.css @@ -221,7 +221,7 @@ body { border: 1px solid var(--offwhite); } -.edit, .start-stop-server, .start-client { +.edit, .start-stop-server, .start-stop-client { color: var(--offwhite); background-color: var(--blue); } @@ -485,6 +485,7 @@ input { flex-direction: row; width: 100%; justify-content: space-between; + column-gap: 10px; } .instance-info .info { From bf93b8e90ade1b218b92bb38eebfde3a3f0724a0 Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Mon, 1 Jan 2024 18:19:56 +0100 Subject: [PATCH 2/3] Added simplified mode and disabled not useful buttons --- manager/DCS.openbeta - Copia.log | 3 ++ manager/ejs/connections.ejs | 6 +++- manager/ejs/menu.ejs | 14 +++++++-- manager/ejs/passwords.ejs | 4 ++- manager/javascripts/connections.js | 11 +++++-- manager/javascripts/manager.js | 47 ++++++++++++++++++++++++++++-- manager/javascripts/menu.js | 22 +++++++++----- manager/javascripts/passwords.js | 11 +++++-- manager/stylesheets/style.css | 1 + 9 files changed, 98 insertions(+), 21 deletions(-) create mode 100644 manager/DCS.openbeta - Copia.log diff --git a/manager/DCS.openbeta - Copia.log b/manager/DCS.openbeta - Copia.log new file mode 100644 index 00000000..24385365 --- /dev/null +++ b/manager/DCS.openbeta - Copia.log @@ -0,0 +1,3 @@ +Microsoft (R) Windows Script Host Versione 5.812 +Copyright (C) Microsoft Corporation. Tutti i diritti riservati. + diff --git a/manager/ejs/connections.ejs b/manager/ejs/connections.ejs index c2e71afa..4c1dc3a1 100644 --- a/manager/ejs/connections.ejs +++ b/manager/ejs/connections.ejs @@ -29,7 +29,7 @@
-
User path
+
User path
Ports and address
Passwords
<%= install? 'Install': 'Update' %>
@@ -75,15 +75,19 @@ ">
+ <% if (!simplified) { %>
Cancel installation
+ <% } %>
\ No newline at end of file diff --git a/manager/ejs/menu.ejs b/manager/ejs/menu.ejs index 11fee64e..bd638ecd 100644 --- a/manager/ejs/menu.ejs +++ b/manager/ejs/menu.ejs @@ -55,6 +55,8 @@ align-items: center; border-radius: 5px; cursor: pointer; + background-color: transparent; + color: var(--offwhite); } #manager-menu .option:hover { @@ -62,6 +64,12 @@ background-color: var(--offwhite); } + #manager-menu .option.disabled { + pointer-events: none; + color: var(--darkgray); + border-color: var(--darkgray); + } + #manager-menu .option * { pointer-events: none; } @@ -74,14 +82,14 @@
Using this manager, you can install Olympus, update settings, and view and manage instances