Compare commits
	
		
			4 Commits
		
	
	
		
			v7.8.5
			...
			feature/no
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					e02679f744 | ||
| 
						 | 
					21c155339e | ||
| 
						 | 
					bbf34aef29 | ||
| 
						 | 
					225aade89d | 
@@ -38,7 +38,6 @@ namespace ix
 | 
			
		||||
    WebSocket::WebSocket() :
 | 
			
		||||
        _onMessageCallback(OnMessageCallback()),
 | 
			
		||||
        _stop(false),
 | 
			
		||||
        _backgroundThreadRunning(false),
 | 
			
		||||
        _automaticReconnection(true),
 | 
			
		||||
        _handshakeTimeoutSecs(kDefaultHandShakeTimeoutSecs),
 | 
			
		||||
        _enablePong(kDefaultEnablePong),
 | 
			
		||||
@@ -136,7 +135,6 @@ namespace ix
 | 
			
		||||
    {
 | 
			
		||||
        if (_thread.joinable()) return; // we've already been started
 | 
			
		||||
 | 
			
		||||
        _backgroundThreadRunning = true;
 | 
			
		||||
        _thread = std::thread(&WebSocket::run, this);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -157,7 +155,6 @@ namespace ix
 | 
			
		||||
 | 
			
		||||
        _stop = true;
 | 
			
		||||
        _thread.join();
 | 
			
		||||
        _backgroundThreadRunning = false;
 | 
			
		||||
        _stop = false;
 | 
			
		||||
 | 
			
		||||
        _automaticReconnection = automaticReconnection;
 | 
			
		||||
@@ -232,6 +229,27 @@ namespace ix
 | 
			
		||||
        using millis = std::chrono::duration<double, std::milli>;
 | 
			
		||||
        millis duration;
 | 
			
		||||
 | 
			
		||||
        // Try to connect only once when we don't have automaticReconnection setup
 | 
			
		||||
        if (!isConnected() && !isClosing() && !_stop && !_automaticReconnection)
 | 
			
		||||
        {
 | 
			
		||||
            status = connect(_handshakeTimeoutSecs);
 | 
			
		||||
 | 
			
		||||
            if (!status.success)
 | 
			
		||||
            {
 | 
			
		||||
                duration = millis(calculateRetryWaitMilliseconds(retries++));
 | 
			
		||||
 | 
			
		||||
                connectErr.retries = retries;
 | 
			
		||||
                connectErr.wait_time = duration.count();
 | 
			
		||||
                connectErr.reason = status.errorStr;
 | 
			
		||||
                connectErr.http_status = status.http_status;
 | 
			
		||||
                _onMessageCallback(WebSocket_MessageType_Error, "", 0,
 | 
			
		||||
                                   connectErr, WebSocketOpenInfo(),
 | 
			
		||||
                                   WebSocketCloseInfo());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            // Otherwise try to reconnect perpertually
 | 
			
		||||
            while (true)
 | 
			
		||||
            {
 | 
			
		||||
                if (isConnected() || isClosing() || _stop || !_automaticReconnection)
 | 
			
		||||
@@ -241,7 +259,7 @@ namespace ix
 | 
			
		||||
 | 
			
		||||
                status = connect(_handshakeTimeoutSecs);
 | 
			
		||||
 | 
			
		||||
            if (!status.success && !_stop)
 | 
			
		||||
                if (!status.success)
 | 
			
		||||
                {
 | 
			
		||||
                    duration = millis(calculateRetryWaitMilliseconds(retries++));
 | 
			
		||||
 | 
			
		||||
@@ -253,10 +271,15 @@ namespace ix
 | 
			
		||||
                                       connectErr, WebSocketOpenInfo(),
 | 
			
		||||
                                       WebSocketCloseInfo());
 | 
			
		||||
                    
 | 
			
		||||
                    // Only sleep if we aren't in the middle of stopping
 | 
			
		||||
                    if (!_stop)
 | 
			
		||||
                    {
 | 
			
		||||
                        std::this_thread::sleep_for(duration);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void WebSocket::run()
 | 
			
		||||
    {
 | 
			
		||||
@@ -320,8 +343,7 @@ namespace ix
 | 
			
		||||
            // 4. In blocking mode, getting out of this function is triggered by
 | 
			
		||||
            //    an explicit disconnection from the callback, or by the remote end
 | 
			
		||||
            //    closing the connection, ie isConnected() == false.
 | 
			
		||||
            //    closing the connection, ie isConnectedOrClosing() == false.
 | 
			
		||||
            if (!_backgroundThreadRunning && !isConnected() && !_automaticReconnection) return;
 | 
			
		||||
            if (!isConnected() && !_automaticReconnection) return;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -39,6 +39,7 @@ namespace ix
 | 
			
		||||
            std::cout << "Disabling automatic reconnection with "
 | 
			
		||||
                         "_webSocket.disableAutomaticReconnection()"
 | 
			
		||||
                         " not supported yet" << std::endl;
 | 
			
		||||
            _webSocket.disableAutomaticReconnection();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user