Compare commits

...

1 Commits
v1.1.1 ... main

Author SHA1 Message Date
minish 54565f6af8
feat: ctx + ping 2025-12-30 03:23:47 -05:00
2 changed files with 26 additions and 1 deletions

View File

@ -1,6 +1,7 @@
package main
import (
"context"
"log"
"time"
@ -15,6 +16,9 @@ const (
func main() {
ws := websocket.NewWebSocketClient(
// ctx
context.Background(),
// onOpen
func(ws *websocket.WebSocketClient) {
log.Println("Connected")

View File

@ -25,11 +25,12 @@ type WebSocketClient struct {
}
func NewWebSocketClient(
ctx context.Context,
onOpen func(ws *WebSocketClient),
onClose func(ws *WebSocketClient),
onMessage func(ws *WebSocketClient, payload []byte),
) *WebSocketClient {
ctx, cancel := context.WithCancel(context.Background())
ctx, cancel := context.WithCancel(ctx)
return &WebSocketClient{
ctx: ctx,
cancel: cancel,
@ -84,6 +85,7 @@ func (ws *WebSocketClient) Connect(
var payload []byte
_, payload, err := ws.conn.Read(ws.ctx)
if err != nil {
ws.cancel()
if ws.onClose != nil {
ws.onClose(ws)
}
@ -94,6 +96,21 @@ func (ws *WebSocketClient) Connect(
}
}()
// Ping Sender
ws.wg.Add(1)
go func() {
defer ws.wg.Done()
pingTicker := time.NewTicker(time.Second * 10)
for {
select {
case <-ws.ctx.Done():
return
case <-pingTicker.C:
ws.conn.Ping(ws.ctx)
}
}
}()
return nil
}
@ -113,3 +130,7 @@ func (ws *WebSocketClient) Disconnect() {
func (ws *WebSocketClient) SendJSON(v any) error {
return wsjson.Write(ws.ctx, ws.conn, v)
}
func (ws *WebSocketClient) SendPing() error {
return ws.conn.Ping(ws.ctx)
}