diff --git a/v1/client/client.go b/v1/client/client.go index 04d82b1..39f4a6e 100644 --- a/v1/client/client.go +++ b/v1/client/client.go @@ -156,6 +156,7 @@ func (b *SafeWebsocketClientBuilder) Build(ctx context.Context) (*SafeWebsocketC reconnectCh: make(chan struct{}, 1), isConnected: false, doneMap: NewSafeMap[string, chan struct{}](), + writeChan: make(chan Message), } if b.authenticateFn != nil { @@ -404,11 +405,15 @@ func (wsClient *SafeWebsocketClient) reconnectHandler() { case <-wsClient.reconnectCh: log.Println("Reconnect triggered") - if wsClient.cancelFuncs != nil { - for _, cancel := range wsClient.cancelFuncs { - cancel() + wsClient.mu.ReadHandler(func() error { + if wsClient.cancelFuncs != nil { + for _, cancel := range wsClient.cancelFuncs { + cancel() + } } - } + return nil + }) + wsClient.isConnected = false time.Sleep(100 * time.Millisecond) @@ -470,11 +475,14 @@ func (wsClient *SafeWebsocketClient) Write(data []byte) error { } func (wsClient *SafeWebsocketClient) Close() error { - if wsClient.cancelFuncs != nil { - for _, cancel := range wsClient.cancelFuncs { - cancel() + wsClient.mu.ReadHandler(func() error { + if wsClient.cancelFuncs != nil { + for _, cancel := range wsClient.cancelFuncs { + cancel() + } } - } + return nil + }) if wsClient.reconnectChans != nil { for _, reconnectChan := range wsClient.reconnectChans {