27 lines
874 B
C#
27 lines
874 B
C#
namespace Bts.DataStream;
|
|
|
|
using BCG;
|
|
|
|
using Spark.Core.Disposables;
|
|
|
|
using System;
|
|
using System.Reactive.Linq;
|
|
|
|
public static class DataStreamExtensions {
|
|
public static ViewStream AsViewStream(this IObservable<DataPacket> source) =>
|
|
source as ViewStream ?? new ObservableViewStream(source);
|
|
|
|
public static IObservable<DataPacket> AsObservable(this ViewStream source) {
|
|
return source as IObservable<DataPacket> ?? Observable.Create<DataPacket>(Subscribe);
|
|
|
|
IDisposable Subscribe(IObserver<DataPacket> observer) {
|
|
source.onChange += OnChange;
|
|
return Disposable.Create(() => source.onChange -= OnChange);
|
|
|
|
void OnChange(object? newValue) =>
|
|
observer.OnNext(newValue as DataPacket ?? throw new ArgumentException(
|
|
$"Expected DataPacket, got {newValue?.GetType()}", nameof(newValue)));
|
|
}
|
|
}
|
|
}
|