RpcQueryDefinition.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System;
  2. using InABox.Core;
  3. namespace InABox.Rpc
  4. {
  5. public class RpcQueryDefinition : ISerializeBinary
  6. {
  7. public String? Key { get; set; }
  8. public Type Type { get; set; }
  9. public IFilter? Filter { get; set; }
  10. public IColumns? Columns { get; set; }
  11. public ISortOrder? Sort { get; set; }
  12. public void SerializeBinary(CoreBinaryWriter writer)
  13. {
  14. writer.Write(Key ?? "");
  15. writer.Write(Type.EntityName());
  16. writer.Write(Filter != null);
  17. if (Filter != null)
  18. Filter.SerializeBinary(writer);
  19. writer.Write(Columns != null);
  20. if (Columns != null)
  21. Columns.SerializeBinary(writer);
  22. writer.Write(Sort != null);
  23. if (Sort != null)
  24. Sort.SerializeBinary(writer);
  25. }
  26. public void DeserializeBinary(CoreBinaryReader reader)
  27. {
  28. Key = reader.ReadString();
  29. var type = reader.ReadString();
  30. Type = CoreUtils.GetEntity(type);
  31. if (reader.ReadBoolean())
  32. {
  33. var filtertype = typeof(Filter<>).MakeGenericType(Type);
  34. Filter = Activator.CreateInstance(filtertype) as IFilter;
  35. Filter?.DeserializeBinary(reader);
  36. }
  37. if (reader.ReadBoolean())
  38. {
  39. var columnstype = typeof(Columns<>).MakeGenericType(Type);
  40. Columns = Activator.CreateInstance(columnstype) as IColumns;
  41. Columns?.DeserializeBinary(reader);
  42. }
  43. if (reader.ReadBoolean())
  44. {
  45. var sorttype = typeof(SortOrder<>).MakeGenericType(Type);
  46. Sort = Activator.CreateInstance(sorttype) as ISortOrder;
  47. Sort?.DeserializeBinary(reader);
  48. }
  49. }
  50. }
  51. }