RpcQueryDefinition.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System;
  2. using System.Net;
  3. using InABox.Core;
  4. namespace InABox.Rpc
  5. {
  6. public class RpcQueryDefinition : ISerializeBinary
  7. {
  8. public string Key { get; set; }
  9. public Type Type { get; set; }
  10. public IFilter? Filter { get; set; }
  11. public IColumns? Columns { get; set; }
  12. public ISortOrder? Sort { get; set; }
  13. public CoreRange? Range { get; set; }
  14. public void SerializeBinary(CoreBinaryWriter writer)
  15. {
  16. writer.Write(Key ?? "");
  17. writer.Write(Type.EntityName());
  18. writer.WriteBinaryValue(Filter);
  19. writer.WriteBinaryValue(Columns);
  20. writer.WriteBinaryValue(Sort);
  21. writer.WriteBinaryValue(Range);
  22. }
  23. public void DeserializeBinary(CoreBinaryReader reader)
  24. {
  25. Key = reader.ReadString();
  26. Type = CoreUtils.GetEntity(reader.ReadString());
  27. Filter = reader.ReadBinaryValue(typeof(Filter<>).MakeGenericType(Type)) as IFilter;
  28. Columns = reader.ReadBinaryValue(typeof(Columns<>).MakeGenericType(Type)) as IColumns;
  29. Sort = reader.ReadBinaryValue(typeof(SortOrder<>).MakeGenericType(Type)) as ISortOrder;
  30. Range = reader.ReadBinaryValue<CoreRange>();
  31. }
  32. public string FullDescription() => $"[{Filter}]";
  33. public string ShortDescription() => $"Query";
  34. }
  35. }