ModelExtensionMethod.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Reflection;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using Microsoft.AspNetCore.Http;
  9. using Microsoft.AspNetCore.Server.HttpSys;
  10. using static CompServ.CompServConst;
  11. namespace CompServ
  12. {
  13. public static class ModelExtensionMethod
  14. {
  15. public static async Task<CompressRequestModel> ExtractCompressRequestAsync(this HttpRequest request)
  16. {
  17. if (int.TryParse(request.Headers[RequestHeaderCompressThreads], out var cThread) == false) cThread = 1;
  18. if (int.TryParse(request.Headers[RequestHeaderCompressLevel], out var cLevel) == false) cLevel = 0;
  19. var msInput = request.ContentLength.HasValue
  20. ? new MemoryStream((int)request.ContentLength.Value)
  21. : new MemoryStream();
  22. request.Body.Position = 0;
  23. await request.Body.CopyToAsync(msInput);
  24. return new CompressRequestModel
  25. {
  26. Level = cLevel,
  27. Threads = cThread,
  28. DataToCompress = msInput.ToArray()
  29. };
  30. }
  31. public static HttpRequestMessage BuildRequestMessage(this CompressRequestModel model)
  32. {
  33. return new HttpRequestMessage(HttpMethod.Post, ApiPathWorkerCompress)
  34. {
  35. Headers =
  36. {
  37. {RequestHeaderCompressLevel,model.Level.ToString()},
  38. {RequestHeaderCompressThreads,model.Threads.ToString()},
  39. },
  40. Version = HttpVersion.Version20,
  41. VersionPolicy = HttpVersionPolicy.RequestVersionExact,
  42. Content = new ByteArrayContent(model.DataToCompress.Array!, model.DataToCompress.Offset, model.DataToCompress.Count)
  43. };
  44. }
  45. public static HttpRequestMessage BuildRequestMessage(this DecompressRequestModel model)
  46. {
  47. return new HttpRequestMessage(HttpMethod.Post, ApiPathWorkerDecompress)
  48. {
  49. Version = HttpVersion.Version20,
  50. VersionPolicy = HttpVersionPolicy.RequestVersionExact,
  51. Content = new ByteArrayContent(model.DataToDecompress.Array!, model.DataToDecompress.Offset, model.DataToDecompress.Count),
  52. };
  53. }
  54. public static HttpRequestMessage BuildWorkerRegisterRequestMessage(int port, int ratio)
  55. {
  56. return new HttpRequestMessage(HttpMethod.Post, ApiPathHubRegisterWorker)
  57. {
  58. Headers =
  59. {
  60. { RequestHeaderWorkerPort, port.ToString() },
  61. { RequestHeaderWorkerRatio, ratio.ToString() }
  62. },
  63. Content = new ByteArrayContent(Array.Empty<byte>()),
  64. Version = HttpVersion.Version20,
  65. VersionPolicy = HttpVersionPolicy.RequestVersionExact,
  66. };
  67. }
  68. public static HttpRequestMessage BuildWorkerUnRegisterRequestMessage(int port)
  69. {
  70. return new HttpRequestMessage(HttpMethod.Post, ApiPathHubUnRegisterWorker)
  71. {
  72. Headers = { { RequestHeaderWorkerPort, port.ToString() } },
  73. Content = new ByteArrayContent(Array.Empty<byte>()),
  74. Version = HttpVersion.Version20,
  75. VersionPolicy = HttpVersionPolicy.RequestVersionExact,
  76. };
  77. }
  78. public static (int? port, int? ratio) ExtractWorkerRegister(this HttpRequest request)
  79. {
  80. var p = int.TryParse(request.Headers[RequestHeaderWorkerPort], out var port)
  81. ? (int?)port
  82. : null;
  83. var r = int.TryParse(request.Headers[RequestHeaderWorkerRatio], out var ratio)
  84. ? (int?)ratio
  85. : null;
  86. return (p, r);
  87. }
  88. public static HttpRequestMessage BuildClientGetWorkerRequest()
  89. {
  90. return new HttpRequestMessage(HttpMethod.Get, ApiPathHubGetWorker)
  91. {
  92. Content = new ByteArrayContent(Array.Empty<byte>()),
  93. Version = HttpVersion.Version20,
  94. VersionPolicy = HttpVersionPolicy.RequestVersionExact,
  95. };
  96. }
  97. }
  98. }