1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- using System;
- using System.IO;
- using InABox.Core;
- using MessagePack;
- 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();
- }
- }
- }
|