| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | using System;using System.IO;using InABox.Core;namespace InABox.Rpc{    [Serializable]    public partial class RpcMessage : ISerializeBinary, ICoreFormattable    {        public Guid Id { get; set; }        public String Command { get; set; }        public byte[] Payload { get; set; }        public RpcError Error { get; set; }        public override string ToString() => $"{Command} [{Error}]";                public RpcMessage()        {            Id = Guid.NewGuid();            Command = "";            Payload = Array.Empty<byte>();            Error = RpcError.NONE;        }                        public RpcMessage(Guid id, string command, byte[] payload) : this()        {            Id = id;            Command = command;            Payload = payload;            Error = RpcError.NONE;        }        public void SerializeBinary(CoreBinaryWriter writer)        {            writer.Write(Id);            writer.Write(Command);            writer.WriteBinaryValue(Payload);            writer.Write(Error.ToString());        }        public void DeserializeBinary(CoreBinaryReader reader)        {            Id = reader.ReadGuid();            Command = reader.ReadString();            Payload = reader.ReadBinaryValue<byte[]>();            if (Enum.TryParse<RpcError>(reader.ReadString(), out var error))                Error = error;        }                public void Write(BinaryWriter writer)        {            writer.Write(Id);            writer.Write(Command);            writer.Write(Payload.Length);            writer.Write(Payload);            writer.Write((Int32)Error);        }        public void Read(BinaryReader reader)        {            Id = reader.ReadGuid();            Command = reader.ReadString();            var _length = reader.ReadInt32();            Payload = reader.ReadBytes(_length);            Error = (RpcError)reader.ReadInt32();        }    }}
 |