using System.Reactive; namespace TwitchChatTTS.Bus { public class ServiceBusObservable : ObservableBase { private readonly string _topic; private readonly ServiceBusCentral _central; public ServiceBusObservable(string topic, ServiceBusCentral central) { _topic = topic; _central = central; } protected override IDisposable SubscribeCore(IObserver observer) { _central.Add(_topic, observer); return new ServiceBusUnsubscriber(_topic, _central, observer); } private sealed class ServiceBusUnsubscriber : IDisposable { private readonly string _topic; private readonly ServiceBusCentral _central; private readonly IObserver _receiver; public ServiceBusUnsubscriber(string topic, ServiceBusCentral central, IObserver receiver) { _topic = topic; _central = central; _receiver = receiver; } public void Dispose() { _central.RemoveObserver(_topic, _receiver); } } } }