Example #1
0
 public Task ProcessDeviceMessage(IIdentity identity, IMessage message)
 {
     Preconditions.CheckNotNull(message, nameof(message));
     Preconditions.CheckNotNull(identity, nameof(identity));
     Events.MessageReceived(identity, message);
     MetricsV0.MessageCount(identity, 1);
     using (MetricsV0.MessageLatency(identity))
     {
         IRoutingMessage routingMessage = this.ProcessMessageInternal(message, true);
         Metrics.AddMessageSize(routingMessage.Size(), identity.Id);
         return(this.router.RouteAsync(routingMessage));
     }
 }
Example #2
0
            async Task <ISinkResult <IRoutingMessage> > ProcessClientMessagesBatch(string id, List <IRoutingMessage> routingMessages, CancellationToken token)
            {
                if (string.IsNullOrEmpty(id))
                {
                    return(HandleNoIdentity(routingMessages));
                }

                if (token.IsCancellationRequested)
                {
                    return(HandleCancelled(routingMessages));
                }

                Util.Option <ICloudProxy> cloudProxy = await this.cloudEndpoint.cloudProxyGetterFunc(id);

                ISinkResult result = await cloudProxy.Match(
                    async cp =>
                {
                    try
                    {
                        List <IMessage> messages = routingMessages
                                                   .Select(r => this.cloudEndpoint.messageConverter.ToMessage(r))
                                                   .ToList();

                        using (MetricsV0.CloudLatency(id))
                        {
                            if (messages.Count == 1)
                            {
                                await cp.SendMessageAsync(messages[0]);
                            }
                            else
                            {
                                await cp.SendMessageBatchAsync(messages);
                            }
                        }

                        MetricsV0.MessageCount(id, messages.Count);

                        return(new SinkResult <IRoutingMessage>(routingMessages));
                    }
                    catch (Exception ex)
                    {
                        return(this.HandleException(ex, id, routingMessages));
                    }
                },
                    () => Task.FromResult(HandleNoConnection(id, routingMessages)));

                return(result);
            }
Example #3
0
        public Task ProcessDeviceMessageBatch(IIdentity identity, IEnumerable <IMessage> messages)
        {
            IList <IMessage> messagesList = messages as IList <IMessage>
                                            ?? Preconditions.CheckNotNull(messages, nameof(messages)).ToList();

            Events.MessagesReceived(identity, messagesList);
            MetricsV0.MessageCount(identity, messagesList.Count);

            IEnumerable <IRoutingMessage> routingMessages = messagesList
                                                            .Select(
                m =>
            {
                IRoutingMessage routingMessage = this.ProcessMessageInternal(m, true);
                Metrics.AddMessageSize(routingMessage.Size(), identity.Id);
                return(routingMessage);
            });

            return(this.router.RouteAsync(routingMessages));
        }