Ejemplo n.º 1
0
        private async Task BroadcastMessages(RaceStream message)
        {
            foreach (var subscriber in _subscribers.Values)
            {
                var item = await SendMessageToSubscriber(subscriber, message);

                if (item != null)
                {
                    RemoveSubscriber(item);
                }
                ;
            }
        }
Ejemplo n.º 2
0
        public ValueTask <bool> Enqueue(RaceStream rs)
        {
            async Task <bool> AsyncSlowPath(RaceStream thing)
            {
                while (await _writer.WaitToWriteAsync())
                {
                    if (_writer.TryWrite(thing))
                    {
                        return(true);
                    }
                }
                return(false); // Channel was completed during the wait
            }

            return(_writer.TryWrite(rs) ? new ValueTask <bool>(true) : new ValueTask <bool>(AsyncSlowPath(rs)));
        }
Ejemplo n.º 3
0
        private async Task <Subscriber> SendMessageToSubscriber(Subscriber subscriber, RaceStream message)
        {
            try
            {
                //_logger.LogInformation($"Broadcasting: {message.Name} - {message.Message}");
                await subscriber.Enqueue(message);

                return(null);
            }
            catch (Exception ex)
            {
                //_logger.LogError(ex, "Could not send");
                return(subscriber);
            }
        }
Ejemplo n.º 4
0
 public async Task BroadcastMessageAsync(RaceStream message)
 {
     await BroadcastMessages(message);
 }