Exemple #1
0
        private void DoSendWork(object state)
        {
            Message message = _messageStorage.GetNext();

            while (message != null)
            {
                if (message != null)
                {
                    var connections = _connectionStorage.GetConnectionsByTopic(message.Topic);

                    foreach (var connection in connections)
                    {
                        var client  = new Notifier.NotifierClient(connection.GrpcChannel);
                        var request = new NotifyRequest()
                        {
                            Content = message.Content
                        };

                        try
                        {
                            if (connection.Limit <= 0)
                            {
                                client.Notify(new NotifyRequest()
                                {
                                    Content = "Message limit is out. You are disconnected."
                                });
                                _connectionStorage.Remove(connection.Address);
                                continue;
                            }

                            var reply = client.Notify(request);
                            _connectionStorage.UpdateLimit(connection.Address);
                            Console.WriteLine($"Notified subscriber {connection.Address} with {message.Content}. Response: {reply}");
                        }
                        catch (RpcException re)
                        {
                            if (re.StatusCode == StatusCode.Internal)
                            {
                                _connectionStorage.Remove(connection.Address);
                            }
                            Console.WriteLine(re.Message);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine($"Error notifying subscriber {connection.Address}. {e.Message}");
                        }
                    }
                }

                message = _messageStorage.GetNext();
            }
        }
Exemple #2
0
 public async Task SendMessageAsync(Message message)
 {
     while (!_messageStorageService.IsEmpty())
     {
         var msg = _messageStorageService.GetNext();
         if (msg != null)
         {
             var connections = _connectionService.GetConnectionsBySensor(msg.Sensor);
             foreach (var conn in connections)
             {
                 await NotifySubscriber(msg, conn);
             }
         }
     }
 }
Exemple #3
0
        private void DoSendWork(object state)
        {
            while (!_messageStorage.IsEmpty())
            {
                var message = _messageStorage.GetNext();

                if (message != null)
                {
                    var connections = _connectionStorage.GetConnectionsByTopic(message.Topic);

                    foreach (var connection in connections)
                    {
                        var client  = new Notifier.NotifierClient(connection.Channel);
                        var request = new NotifyRequest()
                        {
                            Content = message.Content
                        };

                        try
                        {
                            var reply = client.Notify(request);
                            Console.WriteLine($"Notified subscriber {connection.Addres} with {message.Content}. Response: {reply.IsSuccess}");
                        }
                        catch (RpcException rpcException)
                        {
                            if (rpcException.StatusCode == StatusCode.Internal)
                            {
                                _connectionStorage.Remove(connection.Addres);
                            }

                            Console.WriteLine($"RPC Error notifying subscriber {connection.Addres}. {rpcException.Message}");
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine($"Error notifying subscriber {connection.Addres}. {e.Message}");
                        }
                    }
                }
            }
        }