public ProtoBufferTransportMessage(TransportMessage transportMessage) { Id = transportMessage.Id; ContentType = transportMessage.ContentType; object contentObject; if (transportMessage.IsInvokeMessage()) { contentObject = new ProtoBufferRemoteInvokeMessage(transportMessage.GetContent<RemoteInvokeMessage>()); } else if (transportMessage.IsInvokeResultMessage()) { contentObject = new ProtoBufferRemoteInvokeResultMessage(transportMessage.GetContent<RemoteInvokeResultMessage>()); } else { throw new NotSupportedException($"无法支持的消息类型:{ContentType}!"); } Content = SerializerUtilitys.Serialize(contentObject); }
private void MessageListener_Received(IMessageSender sender, TransportMessage message) { if (_logger.IsEnabled(LogLevel.Information)) _logger.LogInformation("接收到消息。"); TaskCompletionSource<TransportMessage> task; if (!_resultDictionary.TryGetValue(message.Id, out task)) return; if (message.IsInvokeResultMessage()) { var content = (RemoteInvokeResultMessage)message.Content; if (!string.IsNullOrEmpty(content.ExceptionMessage)) { task.TrySetException(new RpcRemoteException(content.ExceptionMessage)); } else { task.SetResult(message); } } if (message.IsInvokeMessage()) _serviceExecutor?.ExecuteAsync(sender, message); }