DetIbsUtil.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using CliWrap;
  2. using CliWrap.Buffered;
  3. using Ips.Library.Basic;
  4. using Ips.Library.Entity;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace Ips.DetAlgorithm
  11. {
  12. public static class DetIbsUtil
  13. {
  14. static readonly string CliFile = Path.Combine(IpsPath.CliRootDir, "detibs", "detibs.exe");
  15. public static async Task<ExeResult<IbcResult>> Get(string filename, int start = 0, int timeout = 60, CancellationToken token = default)
  16. {
  17. var cli = Cli.Wrap(CliFile)
  18. .WithArguments(args =>
  19. {
  20. args.Add(filename);
  21. args.Add("-s").Add(start);
  22. });
  23. var res = await cli.ExecuteBufferedAsync(token.LinkTimeout(timeout));
  24. var result = new IbcResult(res.StandardOutput);
  25. return ExeResult.Create(result, cli.Arguments, res.StartTime, res.ExitTime, res.ExitCode, res.StandardError);
  26. }
  27. public static async Task<ExeResult<IbsIdResult>> GetOne(string filename, int start = 0, int timeout = 60, CancellationToken token = default)
  28. {
  29. var res = await Get(filename, start, timeout, token);
  30. var item = res.Result.Items?.FirstOrDefault(m => m.IbsId != -1) ?? new IbsIdResult();
  31. return ExeResult.Create(item, res.Arguments, res.StartTime, res.ExitTime, res.ExitCode, res.ExitMsg);
  32. }
  33. }
  34. }