RPCMessage.cs 1.5 KB

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