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)); } }
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); }
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)); }