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