RPCMessage.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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 = Array.Empty<byte>();
  18. Error = RpcError.NONE;
  19. }
  20. public RpcMessage(Guid id, string command, byte[] payload)
  21. {
  22. Id = id;
  23. Command = command;
  24. Payload = payload;
  25. Error = RpcError.NONE;
  26. }
  27. public void SerializeBinary(CoreBinaryWriter writer)
  28. {
  29. writer.Write(Id);
  30. writer.Write(Command);
  31. writer.WriteBinaryValue(Payload);
  32. writer.Write(Error.ToString());
  33. }
  34. public void DeserializeBinary(CoreBinaryReader reader)
  35. {
  36. Id = reader.ReadGuid();
  37. Command = reader.ReadString();
  38. Payload = reader.ReadBinaryValue<byte[]>();
  39. if (Enum.TryParse<RpcError>(reader.ReadString(), out var error))
  40. Error = error;
  41. }
  42. }
  43. }