mirror of
https://github.com/jwetzell/showbridge-go.git
synced 2026-05-15 05:54:17 +00:00
fix websocket connection disconnect and auto reconnect
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user