Skip to content

Commit

Permalink
Removed Telnet service circular dependencies (#179)
Browse files Browse the repository at this point in the history
  • Loading branch information
lvcabral authored Feb 3, 2025
1 parent 91fbc64 commit bf53950
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 36 deletions.
7 changes: 4 additions & 3 deletions src/app/statusbar.js
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ export function setServerStatus(server, enabled, port) {
} else {
statusECP.style.display = "none";
}
} else if (server === "Web") {
} else if (server === "Installer") {
if (enabled) {
installerPort = port;
statusWebText.innerText = port.toString();
Expand Down Expand Up @@ -238,8 +238,9 @@ function updateStatus(data) {
if (data) {
clearCounters();
setStatusColor();
statusIconFile.innerHTML =
data.path.toLowerCase().endsWith(".brs")? "<i class='fa fa-file'></i>" : "<i class='fa fa-cube'></i>";
statusIconFile.innerHTML = data.path.toLowerCase().endsWith(".brs")
? "<i class='fa fa-file'></i>"
: "<i class='fa fa-cube'></i>";
statusFile.innerText = shortenPath(
data.path,
Math.max(MIN_PATH_SIZE, window.innerWidth * PATH_SIZE_FACTOR)
Expand Down
32 changes: 20 additions & 12 deletions src/helpers/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import { DateTime } from "luxon";
import path from "path";
import ElectronPreferences from "electron-preferences";
import { setAspectRatio } from "./window";
import { enableECP, disableECP, subscribeECP, ECPPORT } from "../server/ecp";
import { enableTelnet, disableTelnet } from "../server/telnet";
import { enableECP, disableECP, subscribeECP, ECP_PORT } from "../server/ecp";
import { enableTelnet, disableTelnet, subscribeTelnet, TELNET_PORT } from "../server/telnet";
import {
enableInstaller,
disableInstaller,
Expand Down Expand Up @@ -883,26 +883,34 @@ subscribeECP("settings", updateECPStatus);

export function updateECPStatus(event, enabled) {
if (event === "enabled") {
setPreference("services.ecp", enabled ? ["enabled"] : []);
checkMenuItem("ecp-api", enabled);
const window = BrowserWindow.fromId(1);
window?.webContents.send("serverStatus", "ECP", enabled, ECPPORT);
window?.webContents.send("refreshMenu");
updateServerStatus("ECP", "ecp-api", enabled, ECP_PORT);
}
}

subscribeInstaller("settings", updateInstallerStatus);

export function updateInstallerStatus(event, data) {
if (event === "enabled") {
setPreference("services.installer", data.enabled ? ["enabled"] : []);
checkMenuItem("web-installer", data.enabled);
const window = BrowserWindow.fromId(1);
window?.webContents.send("serverStatus", "Web", data.enabled, data.port);
window?.webContents.send("refreshMenu");
updateServerStatus("Installer", "web-installer", data.enabled, data.port);
}
}

subscribeTelnet("settings", updateTelnetStatus);

export function updateTelnetStatus(event, enabled) {
if (event === "enabled") {
updateServerStatus("Telnet", "telnet", enabled, TELNET_PORT);
}
}

function updateServerStatus(service, menuItem, enabled, port) {
setPreference(`services.${service.toLowerCase()}`, enabled ? ["enabled"] : []);
checkMenuItem(menuItem, enabled);
const window = BrowserWindow.fromId(1);
window?.webContents.send("serverStatus", service, enabled, port);
window?.webContents.send("refreshMenu");
}

// Settings Helper Functions

function saveSimulatorSettings(options, window) {
Expand Down
5 changes: 3 additions & 2 deletions src/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { app, screen } from "electron";
import { DateTime } from "luxon";
import { setPassword, setPort, enableInstaller } from "./server/installer";
import { initECP, enableECP } from "./server/ecp";
import { enableTelnet, updateTelnetStatus } from "./server/telnet";
import { enableTelnet } from "./server/telnet";
import {
createMenu,
enableMenuItem,
Expand All @@ -34,6 +34,7 @@ import {
setTimeZone,
updateECPStatus,
updateInstallerStatus,
updateTelnetStatus,
} from "./helpers/settings";
import {
createWindow,
Expand Down Expand Up @@ -147,7 +148,7 @@ app.on("ready", () => {
if (!firstLoad) {
const status = "enabled";
updateECPStatus(status, settings.value("services.ecp").includes(status));
updateTelnetStatus(settings.value("services.telnet").includes(status));
updateTelnetStatus(status, settings.value("services.telnet").includes(status));
updateInstallerStatus(status, {
enabled: settings.value("services.installer").includes(status),
port: settings.value("services.webPort"),
Expand Down
10 changes: 5 additions & 5 deletions src/server/ecp.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import path from "path";
const WebSocket = require("ws");
const url = require("url");

export const ECPPORT = 8060;
export const SSDPPORT = 1900;
export const ECP_PORT = 8060;
export const SSDP_PORT = 1900;
const DEBUG = false;
const MAC = getMacAddress();
const UDN = "138aedd0-d6ad-11eb-b8bc-" + MAC.replace(/:\s*/g, "");
Expand Down Expand Up @@ -69,22 +69,22 @@ export function enableECP() {
return next();
});
}
ecp.start(ECPPORT)
ecp.start(ECP_PORT)
.catch((error) => {
window.webContents.send("console", `ECP server error:${error.message}`, true);
})
.then((server) => {
// Create SSDP Server
ssdp = new SSDP({
location: {
port: ECPPORT,
port: ECP_PORT,
path: "/",
},
adInterval: 120000,
ttl: 3600,
udn: `uuid:roku:ecp:${device.serialNumber}`,
ssdpSig: "Roku UPnP/1.0 Roku/9.1.0",
ssdpPort: SSDPPORT,
ssdpPort: SSDP_PORT,
suppressRootDeviceAdvertisements: true,
headers: { "device-group.roku.com": "46F5CCE2472F2B14D77" },
});
Expand Down
34 changes: 20 additions & 14 deletions src/server/telnet.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
/*---------------------------------------------------------------------------------------------
* BrightScript Simulation Desktop Application (https://github.com/lvcabral/brs-desktop)
*
* Copyright (c) 2019-2024 Marcelo Lv Cabral. All Rights Reserved.
* Copyright (c) 2019-2025 Marcelo Lv Cabral. All Rights Reserved.
*
* Licensed under the MIT License. See LICENSE in the repository root for license information.
*--------------------------------------------------------------------------------------------*/
import { app, BrowserWindow, ipcMain } from "electron";
import * as telnet from "net";
import { setPreference } from "../helpers/settings";
import { checkMenuItem } from "../menu/menuService";
import { consoleBuffer } from "../helpers/console";
import * as telnet from "net";

const PORT = 8085;
export const TELNET_PORT = 8085;
let server;
let clientId = 0;
let clients = new Map();
Expand Down Expand Up @@ -49,7 +47,7 @@ export function enableTelnet() {
});
server.on("listening", () => {
isTelnetEnabled = true;
updateTelnetStatus(isTelnetEnabled);
notifyAll("enabled", true);
ipcMain.on("telnet", (event, text) => {
if (text !== undefined) {
clients.forEach((client, id) => {
Expand All @@ -62,7 +60,7 @@ export function enableTelnet() {
ipcMain.removeAllListeners("telnet");
window.webContents.send("console", `Remote console server error: ${error.message}`, true);
});
server.listen(PORT);
server.listen(TELNET_PORT);
}

export function disableTelnet() {
Expand All @@ -77,17 +75,25 @@ export function disableTelnet() {
clients = new Map();
}
isTelnetEnabled = false;
updateTelnetStatus(isTelnetEnabled);
notifyAll("enabled", false);
}
}

export function updateTelnetStatus(enabled) {
setPreference("services.telnet", enabled ? ["enabled"] : []);
checkMenuItem("telnet", enabled);
const window = BrowserWindow.fromId(1);
window.webContents.send("serverStatus", "Telnet", enabled, PORT);
window.webContents.send("refreshMenu");
// Observers Handling
const observers = new Map();
export function subscribeTelnet(observerId, observerCallback) {
observers.set(observerId, observerCallback);
}
export function unsubscribeTelnet(observerId) {
observers.delete(observerId);
}
function notifyAll(eventName, eventData) {
observers.forEach((callback, id) => {
callback(eventName, eventData);
});
}

// Data Processing

function processData(data, id, window) {
if (data?.length > 0) {
Expand Down

0 comments on commit bf53950

Please sign in to comment.