You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.3 KiB
52 lines
1.3 KiB
// Needed for NET40 |
|
#if !NET_4_6 |
|
using System; |
|
using LinqInternal.Collections.ThreadSafe; |
|
using LinqInternal.Threading; |
|
using LinqInternal.Threading.Needles; |
|
|
|
namespace LinqInternal.Collections |
|
{ |
|
[Serializable] |
|
internal sealed class ProxyObservable<T> : IObservable<T>, IObserver<T>, IProxyObservable<T> |
|
{ |
|
private readonly SafeSet<Needle<IObserver<T>>> _observers; |
|
|
|
public ProxyObservable() |
|
{ |
|
_observers = new SafeSet<Needle<IObserver<T>>>(); |
|
} |
|
|
|
public void OnCompleted() |
|
{ |
|
foreach (var item in _observers) |
|
{ |
|
item.Value.OnCompleted(); |
|
} |
|
} |
|
|
|
public void OnError(Exception error) |
|
{ |
|
foreach (var item in _observers) |
|
{ |
|
item.Value.OnError(error); |
|
} |
|
} |
|
|
|
public void OnNext(T value) |
|
{ |
|
foreach (var item in _observers) |
|
{ |
|
item.Value.OnNext(value); |
|
} |
|
} |
|
|
|
public IDisposable Subscribe(IObserver<T> observer) |
|
{ |
|
var needle = new Needle<IObserver<T>>(observer); |
|
_observers.AddNew(needle); |
|
return Disposable.Create(() => _observers.Remove(needle)); |
|
} |
|
} |
|
} |
|
#endif |