public void VerifyNullEventTypeTargetIsFalse() { var ett = new EventTypeTarget(typeof(SessionEvent)); Guid?test = null; Assert.IsFalse(ett.Equals(test)); }
/// <summary> /// Composes the observable subject of the <see cref="EventTypeTarget"/> /// </summary> /// <param name="eventTypeTarget"> /// The <see cref="EventTypeTarget"/> to create the <see cref="Subject{T}"/> from /// </param> /// <typeparam name="T"> /// The <see cref="Thing"/> POCO /// </typeparam> /// <returns> /// The <see cref="CDPEventSubject"/> describing the subscription. /// </returns> private CDPEventSubject ComposeEventSubject <T>(EventTypeTarget eventTypeTarget) { var subject = new Subject <T>(); var observable = Observable.Create <T>(o => new CompositeDisposable(subject.Subscribe(o), this.CreateDisposableFromEvent(eventTypeTarget))).Publish().RefCount(); return(new CDPEventSubject(subject, observable)); }
/// <summary> /// Gets or adds (if not existent) the <see cref="IObservable{T}"/> to the <see cref="ConcurrentDictionary{TKey,TValue}"/> /// </summary> /// <param name="eventTypeTarget"> /// The <see cref="EventTypeTarget"/> pertaining to this <see cref="IObservable{T}"/>. /// </param> /// <typeparam name="T"> /// The <see cref="Thing"/> that has changed. /// </typeparam> /// <returns> /// The <see cref="IObservable{T}"/> connected to the target. /// </returns> private IObservable <T> GetOrAddObservable <T>(EventTypeTarget eventTypeTarget) { var cdpEventSubject = this.messageBus.GetOrAdd( eventTypeTarget, arg => new Lazy <CDPEventSubject>(() => this.ComposeEventSubject <T>(eventTypeTarget))).Value; return((IObservable <T>)cdpEventSubject.Observable); }
/// <summary> /// The method that executes when <paramref name="eventTypeTarget"/> needs to be deisposed. /// </summary> /// <param name="eventTypeTarget">The <paramref name="eventTypeTarget"/> that the dispose needs to handle.</param> private void DisposableDelegate(EventTypeTarget eventTypeTarget) { this.messageBus.TryRemove(eventTypeTarget, out _); }
/// <summary> /// Creates a <see cref="IDisposable"/> object from the <see cref="EventTypeTarget"/> with the delegate to run once the /// object is disposed. /// </summary> /// <param name="eventTypeTarget">The <see cref="EventTypeTarget"/> to process.</param> /// <returns>The <see cref="IDisposable"/>.</returns> private IDisposable CreateDisposableFromEvent(EventTypeTarget eventTypeTarget) { return(Disposable.Create(() => this.DisposableDelegate(eventTypeTarget))); }