RPCMessage.cs 1.3 KB

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