Author: Andy Green Date: Tue Aug 05 05:07:21 2025 +0100 server: only send initial and changes to power diff --git a/src/server/s-comms.c b/src/server/s-comms.c index d071c44..c72ce27 100644 --- a/src/server/s-comms.c +++ b/src/server/s-comms.c @@ -810,6 +810,8 @@ callback_ws(struct lws *wsi, enum lws_callback_reasons reason, void *user, } if (pss->is_power) { + char diff = 0; + n = 0; lws_start_foreach_dll(struct lws_dll2 *, px, vhd->pending_plats.head) { sais_plat_t *pl = lws_container_of(px, sais_plat_t, list); @@ -822,17 +824,30 @@ callback_ws(struct lws *wsi, enum lws_callback_reasons reason, void *user, break; memcpy(p, pl->plat, m); p += m; + *p = '\0'; n = 1; } lws_end_foreach_dll(px); - lwsl_notice("%s: detected jobs for %.*s\n", __func__, - (int)lws_ptr_diff_size_t(p, start), start); + /* + * Don't resend the same status over and over + */ - if (lws_write(pss->wsi, start, lws_ptr_diff_size_t(p, start), - LWS_WRITE_TEXT) < 0) - return -1; + if (memcmp(pss->last_power_report, start, lws_ptr_diff_size_t(p, start) + 1)) { + diff = 1; + memcpy(pss->last_power_report, start, lws_ptr_diff_size_t(p, start) + 1); + } + + if (diff && start != p) { + lwsl_notice("%s: detected jobs for %.*s\n", __func__, + (int)lws_ptr_diff_size_t(p, start), start); + if (lws_write(pss->wsi, start, lws_ptr_diff_size_t(p, start), + LWS_WRITE_TEXT) < 0) + return -1; + + goto passthru; + } break; } diff --git a/src/server/s-private.h b/src/server/s-private.h index 9db8a61..1afe772 100644 --- a/src/server/s-private.h +++ b/src/server/s-private.h @@ -126,6 +126,7 @@ struct pss { struct lwsac *ac_alloc_task; char peer_ip[48]; + char last_power_report[8192]; int task_index; int log_cache_index;