9a96ed8236
State deduplication via PartialEq + send_if_modified: Derive PartialEq on the full RigState / RigSnapshot type tree (Freq, Band, RigInfo, RigCapabilities, RigStatus, RigTxStatus, RigRxStatus, RigControl, RigVfo, RigVfoEntry, RigFilterState, RdsData, SpectrumData, RigState, RigSnapshot). Use state_tx.send_if_modified() in refresh_remote_snapshot() so WatchStream only wakes SSE /events subscribers when state actually changed; with a stable rig this eliminates ~1.3 spurious JSON serialisations per second per connected client. Cache-remote-rigs skip on unchanged list: cache_remote_rigs() was rebuilding the Vec and cloning every field on every 750 ms poll. Add a structural check (rig_id, display_name, initialized, audio_port) and return early when nothing has changed — the common steady-state case. RDS JSON pre-serialised at ingestion: SharedSpectrum.replace() now serialises the optional RDS object once and stores it alongside the Arc<SpectrumData> frame. Each /spectrum SSE client's 40 ms tick reads the cached string instead of calling serde_json::to_string() per-client per-tick. Add serde_json to trx-frontend Cargo.toml to support this. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Stan Grams <sjg@haxx.space>
15 lines
335 B
TOML
15 lines
335 B
TOML
# SPDX-FileCopyrightText: 2025 Stanislaw Grams <stanislawgrams@gmail.com>
|
|
#
|
|
# SPDX-License-Identifier: BSD-2-Clause
|
|
|
|
[package]
|
|
name = "trx-frontend"
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
|
|
[dependencies]
|
|
bytes = "1"
|
|
serde_json = { workspace = true }
|
|
trx-core = { path = "../../trx-core" }
|
|
tokio = { workspace = true, features = ["sync"] }
|