예제 #1
0
 private void ReconnectServer()
 {
     if (_tcpClient.ConnectionStatus == TcpConnectionStatus.ConnectionEstablished)
     {
         return;
     }
     _logger.InfoFormat("Try to reconnect to server:{0}.", _serverEndPoint);
     _tcpClient.ReconnectToServer();
 }
예제 #2
0
        private void ReconnectServer()
        {
            if (_tcpClient.IsStopped)
            {
                _logger.Info("Stop to reconnect to server as the tcp client is stopped.");
                return;
            }
            if (_tcpClient.ConnectionStatus == TcpConnectionStatus.Established)
            {
                return;
            }
            if (Interlocked.CompareExchange(ref _isReconnecting, 1, 0) != 0)
            {
                _logger.Info("Reconnect to server is in progress, ignore the current reconnecting.");
                return;
            }

            Thread.Sleep(_setting.ReconnectInterval);

            _logger.InfoFormat("Try to reconnect to server: {0}.", _serverEndPoint);

            var hasException = false;

            try
            {
                _tcpClient.ReconnectToServer();
            }
            catch (Exception ex)
            {
                _logger.ErrorFormat("Reconnect to server has exception.", ex);
                hasException = true;
            }
            finally
            {
                Interlocked.Exchange(ref _isReconnecting, 0);
            }
            if (hasException)
            {
                ReconnectServer();
            }
        }