38 lines
905 B
C#
38 lines
905 B
C#
namespace Bts.DataStream;
|
|
|
|
using BCG;
|
|
|
|
using bts;
|
|
|
|
using System;
|
|
|
|
public class ObservableViewStream : ViewStream, IObservable<DataPacket>, IDisposable {
|
|
readonly IObservable<DataPacket> source;
|
|
IDisposable? subscription;
|
|
|
|
public ObservableViewStream(IObservable<DataPacket> source) =>
|
|
this.source = source;
|
|
|
|
public void Dispose() {
|
|
GC.SuppressFinalize(this);
|
|
if (subscription is not null) {
|
|
subscription.Dispose();
|
|
subscription = null;
|
|
}
|
|
}
|
|
|
|
protected override void myOnFirstSubscriber() {
|
|
Log.isnull(subscription);
|
|
subscription = source.Subscribe(myFireEvent);
|
|
}
|
|
|
|
protected override void myOnLastSubscriber() {
|
|
Log.notnull(subscription);
|
|
subscription.Dispose();
|
|
subscription = null;
|
|
}
|
|
|
|
IDisposable IObservable<DataPacket>.Subscribe(IObserver<DataPacket> observer) =>
|
|
source.Subscribe(observer);
|
|
}
|