/// <summary> /// Connects or reconnects to the server. /// </summary> /// <param name="state">The state. Ignored but required for timer callback methods. Pass null.</param> private void ReconnectToServer(object state) { // Check if already reconnected - ahead of the lock for speed if (_isConnected) { // Do nothing return; } // Lock to ensure atomic operations lock (_reconnectLock) { // Double check if already reconnected if (_isConnected) { // Do nothing return; } // Ensure socket is properly closed try { _client.Close(); } catch { // Ignore } // Close the client _client.Close(); // Reconnect if (!Connect()) { // Reconnection failed, so we're done (the Timer will retry) return; } // If we got here, we're back online, adjust reconnected status _isConnected = true; // Disable the reconnect timer to stop trying to reconnect _reconnectTimer.Change(Timeout.Infinite, Timeout.Infinite); // Fire the reconnected event var reconnected = Reconnected; if (reconnected != null) { reconnected(this, EventArgs.Empty); } } }
/// <summary> /// Stops the cache server. /// </summary> public void Stop() { // Shutdown and close the server socket _server.Close(); }