| using DotPulsar.Internal.Abstractions; |
| using DotPulsar.Internal.PulsarApi; |
| using System; |
| |
| namespace DotPulsar.Internal |
| { |
| public sealed class ProducerManager : IDisposable |
| { |
| private readonly IdLookup<IProducerProxy> _proxies; |
| |
| public ProducerManager() => _proxies = new IdLookup<IProducerProxy>(); |
| |
| public bool HasProducers => !_proxies.IsEmpty(); |
| |
| public void Outgoing(CommandProducer producer, IProducerProxy proxy) => producer.ProducerId = _proxies.Add(proxy); |
| |
| public void Remove(ulong producerId) => _proxies.Remove(producerId); |
| |
| public void Incoming(CommandCloseProducer command) => RemoveProducer(command.ProducerId); |
| |
| public void Dispose() |
| { |
| foreach (var id in _proxies.AllIds()) |
| { |
| RemoveProducer(id); |
| } |
| } |
| |
| private void RemoveProducer(ulong producerId) |
| { |
| var stateManager = _proxies[producerId]; |
| if (stateManager == null) return; |
| stateManager.Disconnected(); |
| _proxies.Remove(producerId); |
| } |
| } |
| } |