diff options
| author | Bernhard Guillon <Bernhard.Guillon@begu.org> | 2026-07-07 14:33:57 +0200 |
|---|---|---|
| committer | Bernhard Guillon <Bernhard.Guillon@begu.org> | 2026-07-07 14:33:57 +0200 |
| commit | 6feda0632367deaa9caf193e89b74f7affd45021 (patch) | |
| tree | 92dcf022db3a57dc45443c31870600f006c87332 /cmd_windows.go | |
| parent | 52ac49a1ebd712198b66c7662b8542376c156194 (diff) | |
| download | sourcewatch-6feda0632367deaa9caf193e89b74f7affd45021.tar.gz sourcewatch-6feda0632367deaa9caf193e89b74f7affd45021.zip | |
Add heartbeat ping/pong to detect disconnects
Windows client sends ping every 10s.
Linux server responds with pong.
If write fails, client detects disconnect and reconnects.
Diffstat (limited to 'cmd_windows.go')
| -rw-r--r-- | cmd_windows.go | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/cmd_windows.go b/cmd_windows.go index 4d7df37..da26684 100644 --- a/cmd_windows.go +++ b/cmd_windows.go @@ -93,6 +93,27 @@ func run() { logInfo("watcher: monitoring for changes ...") + // Heartbeat goroutine to detect disconnects + go func() { + ticker := time.NewTicker(10 * time.Second) + defer ticker.Stop() + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + msg := &ProtocolMessage{Type: "ping"} + data, _ := EncodeMessage(msg) + data = append(data, '\n') + if _, err := conn.Write(data); err != nil { + logErrorf("heartbeat failed: %v", err) + conn.Close() + return + } + } + } + }() + if !watchLoop(ctx, conn, watcher, manifest, stack) { conn.Close() continue |
