RPCMessage.cs 1.1 KB

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