private void HandleMessage(SwimHost host, SwimMessage message) { if (_hostMessages.TryRemove(host, out var oldMessage)) { // TODO handle false _messageAttempts.TryRemove(oldMessage, out _); } if (_hostMessages.TryAdd(host, message)) { // TODO handle false _messageAttempts.TryAdd(message, 0); } }
public void MarkMessageAsSent(SwimMessage message) { var attempts = _messageAttempts.AddOrUpdate(message, 1, (_, previous) => previous + 1); if (attempts <= _attemptLimit) { return; } _messageAttempts.TryRemove(message, out _); // TODO ... var host = _hostMessages.FirstOrDefault(x => ReferenceEquals(x.Value, message)).Key; if (host != null) { _hostMessages.TryRemove(host, out _); } }