Beispiel #1
0
        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)));
 }