/// <summary> /// Changes the state of the connection to the specified <paramref name="state"/> and raises events with the optionally /// specified <paramref name="message"/>. /// </summary> /// <param name="state">The state to which to change.</param> /// <param name="message">The optional message describing the nature of the change.</param> protected void ChangeState(ConnectionState state, string message) { var eventArgs = new ConnectionStateChangedEventArgs(previousState: State, currentState: state, message: message); State = state; StateChanged?.Invoke(this, eventArgs); if (State == ConnectionState.Connected) { Connected?.Invoke(this, EventArgs.Empty); } else if (State == ConnectionState.Disconnected) { Disconnected?.Invoke(this, message); } }
/// <summary> /// Changes the state of the connection to the specified <paramref name="state"/> and raises events with the /// optionally specified <paramref name="message"/>. /// </summary> /// <param name="state">The state to which to change.</param> /// <param name="message">The optional message describing the nature of the change.</param> /// <param name="exception">The optional Exception associated with the change.</param> protected void ChangeState(ConnectionState state, string message, Exception exception = null) { var eventArgs = new ConnectionStateChangedEventArgs(previousState: State, currentState: state, message: message, exception: exception); State = state; Interlocked.CompareExchange(ref StateChanged, null, null)? .Invoke(this, eventArgs); if (State == ConnectionState.Connected) { Interlocked.CompareExchange(ref Connected, null, null)? .Invoke(this, EventArgs.Empty); } else if (State == ConnectionState.Disconnected) { Interlocked.CompareExchange(ref Disconnected, null, null)? .Invoke(this, new ConnectionDisconnectedEventArgs(message, exception)); } }