RPCMessage.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System;
  2. using InABox.Core;
  3. using MessagePack;
  4. namespace InABox.Rpc
  5. {
  6. [Serializable]
  7. [MessagePackObject(keyAsPropertyName: true)]
  8. public class RpcMessage : ISerializeBinary
  9. {
  10. public Guid Id { get; set; }
  11. public String Command { get; set; }
  12. public byte[] Payload { get; set; }
  13. public RpcError Error { get; set; }
  14. public override string ToString() => $"{Command} [{Error}]";
  15. public RpcMessage()
  16. {
  17. Id = Guid.NewGuid();
  18. Command = "";
  19. Payload = Array.Empty<byte>();
  20. Error = RpcError.NONE;
  21. }
  22. public RpcMessage(Guid id, string command, byte[] payload)
  23. {
  24. Id = id;
  25. Command = command;
  26. Payload = payload;
  27. Error = RpcError.NONE;
  28. }
  29. public void SerializeBinary(CoreBinaryWriter writer)
  30. {
  31. writer.Write(Id);
  32. writer.Write(Command);
  33. writer.WriteBinaryValue(Payload);
  34. writer.Write(Error.ToString());
  35. }
  36. public void DeserializeBinary(CoreBinaryReader reader)
  37. {
  38. Id = reader.ReadGuid();
  39. Command = reader.ReadString();
  40. Payload = reader.ReadBinaryValue<byte[]>();
  41. if (Enum.TryParse<RpcError>(reader.ReadString(), out var error))
  42. Error = error;
  43. }
  44. }
  45. }