fix websocket connection disconnect and auto reconnect

This commit is contained in:
Joel Wetzell
2026-05-13 19:59:30 -05:00
parent dc0479c713
commit fa4997ba78
+15 -8
View File
@@ -6,6 +6,7 @@ import (
"fmt" "fmt"
"log/slog" "log/slog"
"net/url" "net/url"
"time"
"github.com/google/jsonschema-go/jsonschema" "github.com/google/jsonschema-go/jsonschema"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
@@ -80,11 +81,17 @@ func (wc *WebSocketClient) Start(ctx context.Context, router common.RouteIO) err
wc.ctx = moduleContext wc.ctx = moduleContext
wc.cancel = cancel wc.cancel = cancel
err := wc.SetupConn() for wc.ctx.Err() == nil {
if err != nil { err := wc.SetupConn()
return err if err != nil {
wc.logger.Error("connection error", "error", err)
} else {
// NOTE(jwetzell): enter read loop until an error occurs
wc.readLoop()
}
// NOTE(jwetzell): if connection is lost or read error wait before trying again
time.Sleep(2 * time.Second)
} }
go wc.readLoop()
<-wc.ctx.Done() <-wc.ctx.Done()
wc.logger.Debug("done") wc.logger.Debug("done")
@@ -95,16 +102,16 @@ func (wc *WebSocketClient) Start(ctx context.Context, router common.RouteIO) err
} }
func (wc *WebSocketClient) readLoop() { func (wc *WebSocketClient) readLoop() {
for { for wc.ctx.Err() == nil {
if wc.conn == nil { if wc.conn == nil {
wc.SetupConn() wc.logger.Error("websocket connection is not established")
continue return
} }
messageType, message, err := wc.conn.ReadMessage() messageType, message, err := wc.conn.ReadMessage()
if err != nil { if err != nil {
wc.logger.Error("read error", "error", err) wc.logger.Error("read error", "error", err)
continue return
} }
if wc.router != nil { if wc.router != nil {
switch messageType { switch messageType {