RPCQueryCommand.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using InABox.Core;
  2. namespace InABox.IPC
  3. {
  4. public class RPCQueryCommand : IRPCCommand<RPCQueryParameters,RPCQueryResponse> { }
  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. public class RPCQueryParameters : ISerializeBinary
  52. {
  53. public RPCQueryDefinition[] Queries { get; set; }
  54. public void SerializeBinary(CoreBinaryWriter writer)
  55. {
  56. writer.WriteBinaryValue(typeof(RPCQueryDefinition[]), Queries);
  57. }
  58. public void DeserializeBinary(CoreBinaryReader reader)
  59. {
  60. Queries = reader.ReadBinaryValue(typeof(RPCQueryDefinition[])) as RPCQueryDefinition[] ?? new RPCQueryDefinition[] {};
  61. }
  62. }
  63. public class RPCQueryTable : ISerializeBinary
  64. {
  65. public String Key { get; set; }
  66. public CoreTable Table { get; set; }
  67. public void SerializeBinary(CoreBinaryWriter writer)
  68. {
  69. writer.Write(Key);
  70. Table.SerializeBinary(writer);
  71. }
  72. public void DeserializeBinary(CoreBinaryReader reader)
  73. {
  74. Key = reader.ReadString();
  75. Table = new CoreTable();
  76. Table.DeserializeBinary(reader);
  77. }
  78. }
  79. public class RPCQueryResponse : ISerializeBinary
  80. {
  81. public RPCQueryTable[] Tables { get; set;}
  82. public void SerializeBinary(CoreBinaryWriter writer)
  83. {
  84. writer.WriteBinaryValue(typeof(RPCQueryTable[]), Tables);
  85. }
  86. public void DeserializeBinary(CoreBinaryReader reader)
  87. {
  88. Tables = reader.ReadBinaryValue(typeof(RPCQueryTable[])) as RPCQueryTable[] ?? new RPCQueryTable[] { };
  89. }
  90. }
  91. }