[feat](trx-frontend-http): consume server-side APRS/CW decode via SSE
Add /decode SSE endpoint streaming decoded messages from the server. Add decode channel OnceLock with set/subscribe pattern. In the browser, connect to /decode EventSource and dispatch to onServerAprs/onServerCw handlers. APRS and CW plugins now receive server-decoded data automatically while keeping browser-side decoding as a fallback. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Stanislaw Grams <stanislawgrams@gmail.com>
This commit is contained in:
@@ -1122,6 +1122,30 @@ volWheel(txVolSlider, txVolPct, () => txGainNode, "txVol");
|
||||
|
||||
document.getElementById("copyright-year").textContent = new Date().getFullYear();
|
||||
|
||||
// --- Server-side decode SSE ---
|
||||
let decodeSource = null;
|
||||
let decodeConnected = false;
|
||||
function connectDecode() {
|
||||
if (decodeSource) { decodeSource.close(); }
|
||||
decodeSource = new EventSource("/decode");
|
||||
decodeSource.onopen = () => { decodeConnected = true; };
|
||||
decodeSource.onmessage = (evt) => {
|
||||
try {
|
||||
const msg = JSON.parse(evt.data);
|
||||
if (msg.type === "aprs" && window.onServerAprs) window.onServerAprs(msg);
|
||||
if (msg.type === "cw" && window.onServerCw) window.onServerCw(msg);
|
||||
} catch (e) {
|
||||
// ignore parse errors
|
||||
}
|
||||
};
|
||||
decodeSource.onerror = () => {
|
||||
decodeSource.close();
|
||||
decodeConnected = false;
|
||||
setTimeout(connectDecode, 5000);
|
||||
};
|
||||
}
|
||||
connectDecode();
|
||||
|
||||
// Release PTT on page unload to prevent stuck transmit
|
||||
window.addEventListener("beforeunload", () => {
|
||||
if (txActive) {
|
||||
|
||||
Reference in New Issue
Block a user