using System; using System.Collections.Generic; using System.Linq; namespace DTLib.Reactive { public abstract class ReactiveProvider { protected List> Streams { get { lock (_streams) return _streams; } set { lock (_streams) _streams = value; } } private List> _streams = new(); public ReactiveProvider() { } public ReactiveProvider(ReactiveStream stream) => Streams.Add(stream); public ReactiveProvider(ICollection> streams) => Streams = streams.ToList(); public virtual void Join(ReactiveStream stream) { if (IsConnetcedTo(stream)) throw new Exception("ReactiveListener is already connected to the stream"); Streams.Add(stream); } public virtual void Leave(ReactiveStream stream) { if (!Streams.Remove(stream)) throw new Exception("ReactiveListener is not connected to the stream"); } public bool IsConnetcedTo(ReactiveStream stream) => Streams.Contains(stream); } }