Пример #1
0
        private async Task MessageListener_Received(IMessageSender sender, TransportMessage message)
        {
            if (_logger.IsEnabled(LogLevel.Trace))
            {
                _logger.LogTrace("服务消费者接收到消息。");
            }

            ManualResetValueTaskSource <TransportMessage> task;

            if (!_resultDictionary.TryGetValue(message.Id, out task))
            {
                return;
            }

            if (message.IsInvokeResultMessage())
            {
                var content = message.GetContent <RemoteInvokeResultMessage>();
                if (!string.IsNullOrEmpty(content.ExceptionMessage))
                {
                    task.SetException(new CPlatformCommunicationException(content.ExceptionMessage, content.StatusCode));
                    WirteDiagnosticError(message);
                }
                else
                {
                    task.SetResult(message);
                    WirteDiagnosticAfter(message);
                }
            }
            if (_serviceExecutor != null && message.IsInvokeMessage())
            {
                await _serviceExecutor.ExecuteAsync(sender, message);
            }
        }
Пример #2
0
        private async Task MessageListener_Received(IMessageSender sender, TransportMessage message)
        {
            TaskCompletionSource <TransportMessage> task;

            if (!_resultDictionary.TryGetValue(message.Id, out task))
            {
                return;
            }

            if (message.IsInvokeResultMessage())
            {
                var content = message.GetContent <RemoteInvokeResultMessage>();
                if (!string.IsNullOrEmpty(content.ExceptionMessage))
                {
                    task.TrySetException(new Exception(content.ExceptionMessage));
                }
                else
                {
                    task.SetResult(message);
                }
            }
            if (message.IsInvokeMessage())
            {
                throw new Exception("message type error");
            }
        }
Пример #3
0
        private void MessageListener_Received(IMessageSender sender, TransportMessage message)
        {
            if (_logger.IsEnabled(LogLevel.Information))
            {
                _logger.Information("接收到消息。");
            }

            TaskCompletionSource <TransportMessage> task;

            if (!_resultDictionary.TryGetValue(message.Id, out task))
            {
                return;
            }

            if (message.IsInvokeResultMessage())
            {
                var content = _objecSerializer.Deserialize <object, 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);
            }
        }
Пример #4
0
        private async Task MessageListener_Received(IMessageSender sender, TransportMessage message)
        {
            if (_logger.IsEnabled(LogLevel.Debug))
            {
                _logger.LogDebug("接收到消息。");
            }

            TaskCompletionSource <TransportMessage> task;

            if (!_resultDictionary.TryGetValue(message.Id, out task))
            {
                return;
            }

            if (message.IsInvokeResultMessage())
            {
                var content = message.GetContent <RemoteInvokeResultMessage>();
                if (!string.IsNullOrEmpty(content.ExceptionMessage))
                {
                    task.TrySetException(new RpcRemoteException(content.ExceptionMessage));
                }
                else
                {
                    task.SetResult(message);
                }
            }
            if (_serviceExecutor != null && message.IsInvokeMessage())
            {
                await _serviceExecutor.ExecuteAsync(sender, message);
            }
        }
Пример #5
0
        private async Task MessageListener_Received(IMessageSender sender, TransportMessage message)
        {
            if (_logger.IsEnabled(LogLevel.Trace))
            {
                _logger.LogTrace("服务消费者接收到消息。");
            }

            TaskCompletionSource <TransportMessage> task;

            if (!_resultDictionary.TryGetValue(message.Id, out task))
            {
                return;
            }

            if (message.IsInvokeResultMessage())
            {
                var content = message.GetContent <RemoteInvokeResultMessage>();
                //if (!string.IsNullOrEmpty(content.ExceptionMessage))
                //{
                //    task.TrySetException(new CPlatformCommunicationException(content.ExceptionMessage));
                //}
                switch (content.StatusCode)
                {
                case StatusCode.OK:
                    task.SetResult(message);
                    break;

                case StatusCode.CPlatformError:
                    task.TrySetException(new CPlatformException(content.ExceptionMessage));
                    break;

                case StatusCode.BusinessError:
                    task.TrySetException(new BusinessException(content.ExceptionMessage));
                    break;

                case StatusCode.CommunicationError:
                    task.TrySetException(new CPlatformCommunicationException(content.ExceptionMessage));
                    break;

                case StatusCode.DataAccessError:
                    task.TrySetException(new DataAccessException(content.ExceptionMessage));
                    break;

                case StatusCode.ValidateError:
                    task.TrySetException(new ValidateException(content.ExceptionMessage));
                    break;
                //case StatusCode.UnKnownError:
                //    task.TrySetException(new CPlatformException(content.ExceptionMessage));
                //    break;

                default:
                    task.TrySetException(new Exception(content.ExceptionMessage));
                    break;
                }
            }
            if (_serviceExecutor != null && message.IsInvokeMessage())
            {
                await _serviceExecutor.ExecuteAsync(sender, message);
            }
        }
Пример #6
0
        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);
        }
Пример #7
0
        private async Task MessageListener_Received(IMessageSender sender, TransportMessage message)
        {
            if (_logger.IsEnabled(LogLevel.Trace))
            {
                _logger.LogTrace("服务消费者接收到消息。");
            }

            ManualResetValueTaskSource <TransportMessage> task;

            if (!_resultDictionary.TryGetValue(message.Id, out task))
            {
                return;
            }

            if (message.IsInvokeResultMessage())
            {
                var content = message.GetContent <RemoteInvokeResultMessage>();
                if (!string.IsNullOrEmpty(content.ExceptionMessage))
                {
                    // task.SetException(new CPlatformCommunicationException(content.ExceptionMessage,content.StatusCode));
                    switch (content.StatusCode)
                    {
                    case StatusCode.Success:
                        task.SetResult(message);
                        break;

                    case StatusCode.CPlatformError:
                        task.SetException(new CPlatformException(content.ExceptionMessage, StatusCode.CPlatformError));
                        break;

                    case StatusCode.BusinessError:
                        task.SetException(new BusinessException(content.ExceptionMessage));
                        break;

                    case StatusCode.CommunicationError:
                        task.SetException(new CPlatformCommunicationException(content.ExceptionMessage));
                        break;

                    case StatusCode.DataAccessError:
                        task.SetException(new DataAccessException(content.ExceptionMessage));
                        break;

                    case StatusCode.ValidateError:
                        task.SetException(new ValidateException(content.ExceptionMessage));
                        break;

                    case StatusCode.UserFriendly:
                        task.SetException(new UserFriendlyException(content.ExceptionMessage));
                        break;

                    case StatusCode.UnAuthorized:
                        task.SetException(new UnAuthorizedException(content.ExceptionMessage));
                        break;

                    case StatusCode.UnAuthentication:
                        task.SetException(new UnAuthenticationException(content.ExceptionMessage));
                        break;

                    default:
                        task.SetException(new Exception(content.ExceptionMessage));
                        break;
                    }
                    WirteDiagnosticError(message);
                }
                else
                {
                    task.SetResult(message);
                    WirteDiagnosticAfter(message);
                }
            }
            if (_serviceExecutor != null && message.IsInvokeMessage())
            {
                await _serviceExecutor.ExecuteAsync(sender, message);
            }
        }