Compare commits

...

1 Commits
v1.0.3 ... main

Author SHA1 Message Date
minish 3b9bd07185
fix: remove reconnect 2025-12-19 21:35:58 -05:00
2 changed files with 18 additions and 32 deletions

View File

@ -16,21 +16,13 @@ const (
func main() { func main() {
ws := websocket.NewWebSocketClient( ws := websocket.NewWebSocketClient(
// onOpen // onOpen
func(ws *websocket.WebSocketClient, isReconnecting bool) { func(ws *websocket.WebSocketClient) {
if isReconnecting {
log.Println("Reconnected")
} else {
log.Println("Connected") log.Println("Connected")
}
}, },
// onClose // onClose
func(ws *websocket.WebSocketClient, isReconnecting bool) { func(ws *websocket.WebSocketClient) {
if isReconnecting {
log.Println("Reconnecting...")
} else {
log.Println("Disconnected") log.Println("Disconnected")
}
}, },
// onMessage // onMessage
@ -40,7 +32,7 @@ func main() {
) )
// Connect to server // Connect to server
if err := ws.Connect(WEBSOCKET_URL, ATTEMPTS, INTERVAL, false); err != nil { if err := ws.Connect(WEBSOCKET_URL, ATTEMPTS, INTERVAL); err != nil {
log.Println("Failed to connect:", err) log.Println("Failed to connect:", err)
} }
@ -56,11 +48,11 @@ func main() {
time.Sleep(2 * time.Second) time.Sleep(2 * time.Second)
// Reconnecting // Reconnecting
ws.Reconnect(WEBSOCKET_URL, ATTEMPTS, INTERVAL) ws.Connect(WEBSOCKET_URL, ATTEMPTS, INTERVAL)
sendMessage() sendMessage()
time.Sleep(2 * time.Second) time.Sleep(2 * time.Second)
ws.Disconnect(false) ws.Disconnect()
log.Println("Done") log.Println("Done")
} }

View File

@ -17,14 +17,14 @@ type WebSocketClient struct {
wg sync.WaitGroup wg sync.WaitGroup
ctx context.Context ctx context.Context
cancel context.CancelFunc cancel context.CancelFunc
onOpen func(ws *WebSocketClient, isReconnecting bool) onOpen func(ws *WebSocketClient)
onClose func(ws *WebSocketClient, isReconnecting bool) onClose func(ws *WebSocketClient)
onMessage func(ws *WebSocketClient, payload []byte) onMessage func(ws *WebSocketClient, payload []byte)
} }
func NewWebSocketClient( func NewWebSocketClient(
onOpen func(ws *WebSocketClient, isReconnecting bool), onOpen func(ws *WebSocketClient),
onClose func(ws *WebSocketClient, isReconnecting bool), onClose func(ws *WebSocketClient),
onMessage func(ws *WebSocketClient, payload []byte), onMessage func(ws *WebSocketClient, payload []byte),
) *WebSocketClient { ) *WebSocketClient {
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
@ -41,8 +41,10 @@ func (ws *WebSocketClient) Connect(
webSocketUrl string, webSocketUrl string,
attempts int, attempts int,
interval time.Duration, interval time.Duration,
isReconnecting bool,
) (err error) { ) (err error) {
ws.Disconnect()
ws.ctx, ws.cancel = context.WithCancel(context.Background())
ws.URL, err = url.Parse(webSocketUrl) ws.URL, err = url.Parse(webSocketUrl)
if err != nil { if err != nil {
return err return err
@ -62,7 +64,7 @@ func (ws *WebSocketClient) Connect(
} }
if ws.onOpen != nil { if ws.onOpen != nil {
ws.onOpen(ws, isReconnecting) ws.onOpen(ws)
} }
// Message Handler // Message Handler
@ -72,14 +74,12 @@ func (ws *WebSocketClient) Connect(
for { for {
select { select {
case <-ws.ctx.Done(): case <-ws.ctx.Done():
// log.Println("websocket receive cancel")
return return
default: default:
var payload []byte var payload []byte
if err := websocket.Message.Receive(ws.conn, &payload); err != nil { if err := websocket.Message.Receive(ws.conn, &payload); err != nil {
// log.Println("receive error", err)
if ws.onClose != nil { if ws.onClose != nil {
ws.onClose(ws, isReconnecting) ws.onClose(ws)
} }
return return
} }
@ -91,7 +91,7 @@ func (ws *WebSocketClient) Connect(
return nil return nil
} }
func (ws *WebSocketClient) Disconnect(isReconnecting bool) { func (ws *WebSocketClient) Disconnect() {
if ws.conn != nil { if ws.conn != nil {
ws.conn.Close() ws.conn.Close()
} }
@ -100,16 +100,10 @@ func (ws *WebSocketClient) Disconnect(isReconnecting bool) {
ws.wg.Wait() ws.wg.Wait()
if ws.onClose != nil { if ws.onClose != nil {
ws.onClose(ws, isReconnecting) ws.onClose(ws)
} }
} }
func (ws *WebSocketClient) Reconnect(url string, attempts int, interval time.Duration) error {
ws.Disconnect(true)
ws.ctx, ws.cancel = context.WithCancel(context.Background())
return ws.Connect(url, attempts, interval, true)
}
func (ws *WebSocketClient) SendJSON(v any) error { func (ws *WebSocketClient) SendJSON(v any) error {
bytes, err := json.Marshal(v) bytes, err := json.Marshal(v)
if err != nil { if err != nil {