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;