UniRx 에셋 추가
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
using System;
|
||||
|
||||
namespace UniRx
|
||||
{
|
||||
public static class SubjectExtensions
|
||||
{
|
||||
public static ISubject<T> Synchronize<T>(this ISubject<T> subject)
|
||||
{
|
||||
return new AnonymousSubject<T>((subject as IObserver<T>).Synchronize(), subject);
|
||||
}
|
||||
|
||||
public static ISubject<T> Synchronize<T>(this ISubject<T> subject, object gate)
|
||||
{
|
||||
return new AnonymousSubject<T>((subject as IObserver<T>).Synchronize(gate), subject);
|
||||
}
|
||||
|
||||
class AnonymousSubject<T, U> : ISubject<T, U>
|
||||
{
|
||||
readonly IObserver<T> observer;
|
||||
readonly IObservable<U> observable;
|
||||
|
||||
public AnonymousSubject(IObserver<T> observer, IObservable<U> observable)
|
||||
{
|
||||
this.observer = observer;
|
||||
this.observable = observable;
|
||||
}
|
||||
|
||||
public void OnCompleted()
|
||||
{
|
||||
observer.OnCompleted();
|
||||
}
|
||||
|
||||
public void OnError(Exception error)
|
||||
{
|
||||
if (error == null) throw new ArgumentNullException("error");
|
||||
|
||||
observer.OnError(error);
|
||||
}
|
||||
|
||||
public void OnNext(T value)
|
||||
{
|
||||
observer.OnNext(value);
|
||||
}
|
||||
|
||||
public IDisposable Subscribe(IObserver<U> observer)
|
||||
{
|
||||
if (observer == null) throw new ArgumentNullException("observer");
|
||||
|
||||
return observable.Subscribe(observer);
|
||||
}
|
||||
}
|
||||
|
||||
class AnonymousSubject<T> : AnonymousSubject<T, T>, ISubject<T>
|
||||
{
|
||||
public AnonymousSubject(IObserver<T> observer, IObservable<T> observable)
|
||||
: base(observer, observable)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user