using System; using System.Collections.Generic; namespace DTLib.Reactive { public class ReactiveProvider : ReactiveWorker { public ReactiveProvider() { } public ReactiveProvider(ReactiveStream stream) : base(stream) { } public ReactiveProvider(IEnumerable> streams) : base(streams) { } event Action AnnounceEvent; public void Announce(T e) => ReactiveWorkerMutex.Execute(() => AnnounceEvent.Invoke(e)); public override void Join(ReactiveStream stream) => ReactiveWorkerMutex.Execute(() => { Streams.Add(stream); AnnounceEvent+=stream.Add; }); public override void Leave(ReactiveStream stream) => ReactiveWorkerMutex.Execute(() => { Streams.Remove(stream); AnnounceEvent-=stream.Add; }); } }