/// <summary> /// Called when a channel state changes. /// </summary> /// <param name="sender">Event sender object.</param> /// <param name="eventArgs">A <see cref="ChannelStateEventArgs"/> object.</param> protected virtual void OnChannelStateChanged(object sender, ChannelStateEventArgs eventArgs) { if (ChannelStateChanged != null) { ChannelStateChanged(sender, eventArgs); } }
/// <summary> /// Sets new channel state. /// The method updates the <see cref="State"/> property and invokes the <see cref="OnChannelStateChanged"/> method. /// </summary> /// <param name="state">The new <see cref="ChannelState"/> value.</param> protected void SetChannelState(ChannelState state) { if (state == State) { return; } var eventArgs = new ChannelStateEventArgs(State, state); if (state == ChannelState.Disconnected) { lock (_subscriptions) { _subscriptions.Clear(); } } else if (state == ChannelState.Reconnecting) { _reconnectTaskCompletionSource = new TaskCompletionSource <object>(); } State = state; Task.Run(() => OnChannelStateChanged(eventArgs)); if (eventArgs.OldState == ChannelState.Reconnecting) { _reconnectTaskCompletionSource.TrySetResult(true); } }
/// <summary> /// Fires the <see cref="StateChanged"/> event. /// </summary> /// <param name="eventArgs">The <see cref="ChannelStateEventArgs"/> object.</param> protected virtual void OnChannelStateChanged(ChannelStateEventArgs eventArgs) { if (eventArgs == null) { throw new ArgumentNullException("eventArgs"); } if (StateChanged != null) { StateChanged(this, eventArgs); } }
/// <summary> /// Called when a channel state changes. /// </summary> /// <param name="sender">Event sender object.</param> /// <param name="eventArgs">A <see cref="ChannelStateEventArgs"/> object.</param> protected virtual void OnChannelStateChanged(object sender, ChannelStateEventArgs eventArgs) { if (ChannelStateChanged != null) ChannelStateChanged(sender, eventArgs); }