public ITemporalStream this[string token] { get { ITemporalStream result = null; m_streams.TryGetValue(token, out result); return(result); } }
public ITemporalStream AddTemporalQueue <T>(string token, string description = null) { ITemporalStream stream = m_streams.GetOrAdd(token, _token => { stream = new TemporalQueue <T>(description); stream.NoObservers += () => { ITemporalStream forNull; m_streams.TryRemove(token, out forNull); }; return(stream); }); return(stream); }
public IDisposable AddTemporalObserver <T>(ITemporalObserver <T> observer, string token, string description = null, int priority = TemporalContextManager.NewTokenPriority) { ITemporalStream stream = m_streams.GetOrAdd(token, _token => { stream = new TemporalStream <T>(description); stream.NoObservers += () => { ITemporalStream forNull; m_streams.TryRemove(token, out forNull); }; return(stream); }); TemporalContext <T> ctx = new TemporalContext <T>((ITemporalValueSource <T>)stream, observer, priority); return(stream.Subscribe(new TemporalContextHelper <T>(ctx, this))); }
public IDisposable[] AddTemporalObservers <T1, T2>(ITemporalObserver <T1> observer1, ITemporalObserver <T2> observer2, string[] tokens, string description = null, int priority = TemporalContextManager.NewTokenPriority) { int idx = 0; ITemporalStream stream = m_streams.GetOrAdd(tokens[idx], token => { stream = new TemporalStream <T1>(description); stream.NoObservers += () => { ITemporalStream forNull; m_streams.TryRemove(token, out forNull); }; return(stream); }); TemporalLinker link1 = TemporalLinker.Create((TemporalStream <T1>)stream, observer1); idx++; stream = m_streams.GetOrAdd(tokens[idx], token => { stream = new TemporalStream <T1>(description); stream.NoObservers += () => { ITemporalStream forNull; m_streams.TryRemove(token, out forNull); }; return(stream); }); TemporalLinker link2 = TemporalLinker.Create((TemporalStream <T2>)stream, observer2); TemporalLinkedContext ctx = new TemporalLinkedContext(new[] { link1, link2 }, priority); return(new IDisposable[] { ((ITemporalStream)link1.m_stream).Subscribe(new TemporalLinkedContextHelper <T1>(ctx, this, 0)), ((ITemporalStream)link2.m_stream).Subscribe(new TemporalLinkedContextHelper <T2>(ctx, this, 1)) }); }
public void SendTemporalValue <T>(string token, TemporalValue <T> value) { ITemporalStream queue = AddTemporalQueue <T>(token); ((ICollection <TemporalValue <T> >)queue).Add(value); }
public void AddTemporalValue <T>(string token, TemporalValue <T> value) { ITemporalStream stream = AddTemporalStream <T>(token); ((ICollection <TemporalValue <T> >)stream).Add(value); }