Example #1
0
        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);
            }
        }
Example #2
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 _);
            }
        }