diff --git a/recws/recws.go b/recws/recws.go index 6cad8cc..30bcb15 100644 --- a/recws/recws.go +++ b/recws/recws.go @@ -54,7 +54,6 @@ type RecConn struct { httpResp *http.Response dialErr error dialer *websocket.Dialer - close chan (bool) *websocket.Conn } @@ -88,7 +87,7 @@ func (rc *RecConn) Close() { rc.Conn.Close() rc.mu.Unlock() } - rc.close <- true + rc.setIsConnected(false) } @@ -291,9 +290,6 @@ func (rc *RecConn) Dial(urlStr string, reqHeader http.Header) { log.Fatalf("Dial: %v", err) } - // Close channel - rc.close = make(chan bool, 1) - // Config rc.setURL(urlStr) rc.setReqHeader(reqHeader) @@ -377,8 +373,8 @@ func (rc *RecConn) keepAlive() { for { if !rc.IsConnected() { - rc.CloseAndReconnect() - return + time.Sleep(time.Millisecond * 100) + continue } if err := rc.writeControlPingMessage(); err != nil { @@ -399,48 +395,43 @@ func (rc *RecConn) connect() { rand.Seed(time.Now().UTC().UnixNano()) for { - select { - case <-rc.close: - return - default: - nextItvl := b.Duration() - wsConn, httpResp, err := rc.dialer.Dial(rc.url, rc.reqHeader) - - rc.mu.Lock() - rc.Conn = wsConn - rc.dialErr = err - rc.isConnected = err == nil - rc.httpResp = httpResp - rc.mu.Unlock() - - if err == nil { - if !rc.getNonVerbose() { - log.Printf("Dial: connection was successfully established with %s\n", rc.url) - } + nextItvl := b.Duration() + wsConn, httpResp, err := rc.dialer.Dial(rc.url, rc.reqHeader) - if rc.hasSubscribeHandler() { - if err := rc.SubscribeHandler(); err != nil { - log.Fatalf("Dial: connect handler failed with %s", err.Error()) - } - if !rc.getNonVerbose() { - log.Printf("Dial: connect handler was successfully established with %s\n", rc.url) - } - } + rc.mu.Lock() + rc.Conn = wsConn + rc.dialErr = err + rc.isConnected = err == nil + rc.httpResp = httpResp + rc.mu.Unlock() - if rc.getKeepAliveTimeout() != 0 { - rc.keepAlive() - } + if err == nil { + if !rc.getNonVerbose() { + log.Printf("Dial: connection was successfully established with %s\n", rc.url) + } - return + if rc.hasSubscribeHandler() { + if err := rc.SubscribeHandler(); err != nil { + log.Fatalf("Dial: connect handler failed with %s", err.Error()) + } + if !rc.getNonVerbose() { + log.Printf("Dial: connect handler was successfully established with %s\n", rc.url) + } } - if !rc.getNonVerbose() { - log.Println(err) - log.Println("Dial: will try again in", nextItvl, "seconds.") + if rc.getKeepAliveTimeout() != 0 { + rc.keepAlive() } - time.Sleep(nextItvl) + return } + + if !rc.getNonVerbose() { + log.Println(err) + log.Println("Dial: will try again in", nextItvl, "seconds.") + } + + time.Sleep(nextItvl) } }