using System; using UniRx.Operators; namespace UniRx { public static partial class Observable { public static IConnectableObservable Multicast(this IObservable source, ISubject subject) { return new ConnectableObservable(source, subject); } public static IConnectableObservable Publish(this IObservable source) { return source.Multicast(new Subject()); } public static IConnectableObservable Publish(this IObservable source, T initialValue) { return source.Multicast(new BehaviorSubject(initialValue)); } public static IConnectableObservable PublishLast(this IObservable source) { return source.Multicast(new AsyncSubject()); } public static IConnectableObservable Replay(this IObservable source) { return source.Multicast(new ReplaySubject()); } public static IConnectableObservable Replay(this IObservable source, IScheduler scheduler) { return source.Multicast(new ReplaySubject(scheduler)); } public static IConnectableObservable Replay(this IObservable source, int bufferSize) { return source.Multicast(new ReplaySubject(bufferSize)); } public static IConnectableObservable Replay(this IObservable source, int bufferSize, IScheduler scheduler) { return source.Multicast(new ReplaySubject(bufferSize, scheduler)); } public static IConnectableObservable Replay(this IObservable source, TimeSpan window) { return source.Multicast(new ReplaySubject(window)); } public static IConnectableObservable Replay(this IObservable source, TimeSpan window, IScheduler scheduler) { return source.Multicast(new ReplaySubject(window, scheduler)); } public static IConnectableObservable Replay(this IObservable source, int bufferSize, TimeSpan window, IScheduler scheduler) { return source.Multicast(new ReplaySubject(bufferSize, window, scheduler)); } public static IObservable RefCount(this IConnectableObservable source) { return new RefCountObservable(source); } /// /// same as Publish().RefCount() /// public static IObservable Share(this IObservable source) { return source.Publish().RefCount(); } } }