Skip to content

Commit 7b12e31

Browse files
authored
Merge pull request #81 from wavelog/dev
V1.1.10
2 parents 7358fd0 + d8eb6bf commit 7b12e31

File tree

3 files changed

+89
-11
lines changed

3 files changed

+89
-11
lines changed

main.js

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,18 @@ const {ipcMain} = require('electron')
44
const http = require('http');
55
const xml = require("xml2js");
66
const net = require('net');
7+
const WebSocket = require('ws');
78

89
const gotTheLock = app.requestSingleInstanceLock();
910

1011
let powerSaveBlockerId;
1112
let s_mainWindow;
1213
let msgbacklog=[];
1314
let httpServer;
15+
let currentCAT=null;
1416
var WServer;
17+
let wsServer;
18+
let wsClients = new Set();
1519

1620
const DemoAdif='<call:5>DJ7NT <gridsquare:4>JO30 <mode:3>FT8 <rst_sent:3>-15 <rst_rcvd:2>33 <qso_date:8>20240110 <time_on:6>051855 <qso_date_off:8>20240110 <time_off:6>051855 <band:3>40m <freq:8>7.155783 <station_callsign:5>TE1ST <my_gridsquare:6>JO30OO <eor>';
1721

@@ -143,6 +147,12 @@ ipcMain.on("quit", async (event,arg) => {
143147
event.returnValue=true;
144148
});
145149

150+
ipcMain.on("radio_status_update", async (event,arg) => {
151+
// Broadcast radio status updates from renderer to WebSocket clients
152+
broadcastRadioStatus(arg);
153+
event.returnValue=true;
154+
});
155+
146156
function show_noti(arg) {
147157
if (Notification.isSupported()) {
148158
try {
@@ -477,11 +487,71 @@ function startserver() {
477487
settrx(qrg,mode);
478488
}
479489
}).listen(54321);
490+
491+
// Start WebSocket server
492+
startWebSocketServer();
480493
} catch(e) {
481494
tomsg('Some other Tool blocks Port 2333 or 54321. Stop it, and restart this');
482495
}
483496
}
484497

498+
function startWebSocketServer() {
499+
try {
500+
wsServer = new WebSocket.Server({ port: 54322, exclusive: true });
501+
502+
wsServer.on('connection', (ws) => {
503+
wsClients.add(ws);
504+
console.log('WebSocket client connected');
505+
506+
ws.on('close', () => {
507+
wsClients.delete(ws);
508+
});
509+
510+
ws.on('error', (error) => {
511+
console.error('WebSocket error:', error);
512+
wsClients.delete(ws);
513+
});
514+
515+
// Send current radio status on connection
516+
ws.send(JSON.stringify({
517+
type: 'welcome',
518+
message: 'Connected to WaveLogGate WebSocket server'
519+
}));
520+
broadcastRadioStatus(currentCAT);
521+
});
522+
523+
wsServer.on('error', (error) => {
524+
console.error('WebSocket server error:', error);
525+
});
526+
527+
} catch(e) {
528+
console.error('WebSocket server startup error:', e);
529+
}
530+
}
531+
532+
function broadcastRadioStatus(radioData) {
533+
currentCAT=radioData;
534+
let message = {
535+
type: 'radio_status',
536+
frequency: radioData.frequency ? parseInt(radioData.frequency) : null,
537+
mode: radioData.mode || null,
538+
power: radioData.power || null,
539+
radio: radioData.radio || 'wlstream',
540+
timestamp: Date.now()
541+
};
542+
// Only include frequency_rx if it's not null
543+
if (radioData.frequency_rx) {
544+
message.frequency_rx = parseInt(radioData.frequency_rx);
545+
}
546+
547+
const messageStr = JSON.stringify(message);
548+
wsClients.forEach((client) => {
549+
if (client.readyState === WebSocket.OPEN) {
550+
client.send(messageStr);
551+
}
552+
});
553+
}
554+
485555

486556
async function get_modes() {
487557
return new Promise((resolve) => {
@@ -574,6 +644,8 @@ async function settrx(qrg, mode = '') {
574644
client.on("close", () => {});
575645
}
576646

647+
// Broadcast frequency/mode change to WebSocket clients
648+
577649
return true;
578650
}
579651

package.json

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"description": "Gateway for connecting WSJT-* and FLRig to Wavelog",
55
"keywords": [],
66
"main": "./main.js",
7-
"version": "1.1.9",
7+
"version": "1.1.10",
88
"author": "DJ7NT",
99
"scripts": {
1010
"start": "electron-forge start",
@@ -14,26 +14,27 @@
1414
"make": "electron-forge make"
1515
},
1616
"dependencies": {
17-
"@electron-forge/maker-dmg": "^7.8.1",
17+
"@electron-forge/maker-dmg": "^7.10.2",
1818
"bootstrap": "^4.6.2",
1919
"dgram": "^1.0.1",
2020
"electron-json-config": "^2.1.0",
2121
"electron-json-storage": "^4.6.0",
2222
"electron-squirrel-startup": "^1.0.1",
2323
"jquery": "^3.7.1",
2424
"popper.js": "^1.16.1",
25-
"tcadif": "^2.2.0",
25+
"tcadif": "^2.3.0",
26+
"ws": "^8.18.3",
2627
"xml2js": "^0.6.2"
2728
},
2829
"devDependencies": {
29-
"@electron-forge/cli": "^7.8.1",
30-
"@electron-forge/maker-deb": "^7.8.1",
31-
"@electron-forge/maker-rpm": "^7.8.1",
32-
"@electron-forge/maker-squirrel": "^7.8.1",
33-
"@electron-forge/maker-zip": "^7.8.1",
34-
"@electron-forge/plugin-auto-unpack-natives": "^7.8.1",
35-
"@electron-forge/publisher-github": "^7.8.1",
36-
"electron": "^35.7.0",
30+
"@electron-forge/cli": "^7.10.2",
31+
"@electron-forge/maker-deb": "^7.10.2",
32+
"@electron-forge/maker-rpm": "^7.10.2",
33+
"@electron-forge/maker-squirrel": "^7.10.2",
34+
"@electron-forge/maker-zip": "^7.10.2",
35+
"@electron-forge/plugin-auto-unpack-natives": "^7.10.2",
36+
"@electron-forge/publisher-github": "^7.10.2",
37+
"electron": "^35.7.5",
3738
"electron-rebuild": "^3.2.9"
3839
}
3940
}

renderer.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ async function get_trx() {
183183
if (((Date.now()-lastCat) > (30*60*1000)) || (!(isDeepEqual(oldCat,currentCat)))) {
184184
console.log(await informWavelog(currentCat));
185185
}
186+
186187
oldCat=currentCat;
187188
return currentCat;
188189
}
@@ -309,6 +310,10 @@ async function informWavelog(CAT) {
309310
data.mode=CAT.mode;
310311
}
311312

313+
const { ipcRenderer } = require('electron');
314+
console.log(data);
315+
ipcRenderer.send('radio_status_update', data);
316+
312317
let x=await fetch(cfg.profiles[active_cfg].wavelog_url + '/api/radio', {
313318
method: 'POST',
314319
rejectUnauthorized: false,

0 commit comments

Comments
 (0)