using System; using System.IO; namespace PCL.Core.App.Essentials; public enum RpcResponseStatus { Success, Failure, Err } public enum RpcResponseType { Empty, Text, Json, Base64 } /// /// Pipe RPC 响应 /// public class RpcResponse { public RpcResponseStatus Status { get; } public RpcResponseType Type { get; } public string? Name { get; } public string? Content { get; } public RpcResponse(RpcResponseStatus status, RpcResponseType type = RpcResponseType.Empty, string? content = null, string? name = null) { if (content is not null && type == RpcResponseType.Empty) throw new ArgumentException("Empty response with non-null content"); Status = status; Type = type; Content = content; Name = name; } // STATUS type [name] // [content] public void Response(StreamWriter writer) { var nameArea = Name is null ? "" : $" {Name}"; writer.WriteLine($"{Status.ToString().ToUpperInvariant()} {Type.ToString().ToLowerInvariant()}{nameArea}"); if (Content is not null) writer.WriteLine(Content); } public static readonly RpcResponse EmptySuccess = new RpcResponse(RpcResponseStatus.Success); public static readonly RpcResponse EmptyFailure = new RpcResponse(RpcResponseStatus.Failure); public static RpcResponse Err(string content, string? name = null) { return new RpcResponse(RpcResponseStatus.Err, RpcResponseType.Text, content, name); } public static RpcResponse Success(RpcResponseType type, string content, string? name = null) { return new RpcResponse(RpcResponseStatus.Success, type, content, name); } public static RpcResponse Failure(RpcResponseType type, string content, string? name = null) { return new RpcResponse(RpcResponseStatus.Failure, type, content, name); } }