Query.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using InABox.API;
  2. using InABox.Core;
  3. using NPOI.SS.UserModel;
  4. namespace InABox.IPC
  5. {
  6. public class RPCQueryHandler : RPCCommandHandler<IRPCServer,RPCQueryParameters,RPCQueryResponse>
  7. {
  8. public override RPCQueryResponse? Execute(RPCQueryParameters? parameters)
  9. {
  10. var response = new RPCQueryResponse();
  11. List<Task<RPCQueryTable>> tasks = new List<Task<RPCQueryTable>>();
  12. foreach (var query in parameters.Queries)
  13. {
  14. var task = Task<RPCQueryTable>.Run(() =>
  15. {
  16. var table = new RPCQueryTable() { Key = query.Key };
  17. // Populate the Table Here given query.filter, query.columns, query.sort
  18. //if (query.Type == null)
  19. // throw new Exception("Parameters.Type is NULL!");
  20. //var servicetype = typeof(RestService<>).MakeGenericType(query.Type);
  21. //var service = Activator.CreateInstance(servicetype);
  22. return table;
  23. });
  24. tasks.Add(task);
  25. }
  26. Task.WaitAll(tasks.ToArray());
  27. response.Tables = tasks.Select(x => x.Result).ToArray();
  28. return response;
  29. }
  30. public RPCQueryHandler(IRPCServer sender) : base(sender)
  31. {
  32. }
  33. }
  34. }