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; }); } } }