예제 #1
0
        void ExecuteResponseError(RemotingResponseError remotingResponseError)
        {
            bool exists = requests.TryRemove(remotingResponseError.RequestId, out RemotingRequest remotingRequest);

            if (!exists)
            {
                logger.Warn($"Got response error for unknown request id {remotingResponseError.RequestId}");
                return;
            }

            remotingRequest.SetError(remotingResponseError.Exception);
            ProcessRemoteExecutionExceptionInternal(remotingRequest, remotingResponseError.Exception);
        }
예제 #2
0
        public void OnMessage(IReader reader)
        {
            try
            {
                if (closed)
                {
                    logger.Debug($"Got message when closed. Ignoring...");
                    return;
                }

                MessageType       messageType       = (MessageType)reader.ReadByte();
                ReadFormatterInfo readFormatterInfo = new ReadFormatterInfo(reader, rpcSerializer);
                switch (messageType)
                {
                case MessageType.RpcRequest:
                    RemotingRequest remotingRequest = new RemotingRequest();
                    remotingRequest.MergeFrom(readFormatterInfo);
                    LogMessageReceived(remotingRequest);
                    EnqueueRequest(remotingRequest);
                    break;

                case MessageType.RpcResponse:
                    RemotingResponse remotingResponse = new RemotingResponse();
                    remotingResponse.MergeFrom(readFormatterInfo);
                    LogMessageReceived(remotingResponse);
                    ExecuteResponse(remotingResponse);
                    break;

                case MessageType.RpcResponseError:
                    RemotingResponseError remotingResponseError = new RemotingResponseError();
                    remotingResponseError.MergeFrom(readFormatterInfo);
                    LogMessageReceived(remotingResponseError);
                    ExecuteResponseError(remotingResponseError);
                    break;

                default:
                    OnExtraMessage(messageType, readFormatterInfo);
                    break;
                }
            }
            catch (Exception outerException)
            {
                logger.Error($"Unhandled exception on {this.GetType().Name}.{nameof(OnMessage)}(): {outerException}");
                Connection.Close();
            }
        }