JsonRequestBinaryResponseRpcRoot.cs 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Net.Http;
  4. using System.Threading.Tasks;
  5. namespace NTMiner {
  6. public static partial class JsonRequestBinaryResponseRpcRoot {
  7. /// <summary>
  8. /// 注意:Response时ReadAsByteArrayAsync后进行二进制反序列化。
  9. /// </summary>
  10. /// <typeparam name="TResponse"></typeparam>
  11. /// <param name="host">用于组装Url</param>
  12. /// <param name="port">用于组装Url</param>
  13. /// <param name="controller">用于组装Url</param>
  14. /// <param name="action">用于组装Url</param>
  15. /// <param name="query">Url上的查询参数,承载登录名、时间戳、签名</param>
  16. /// <param name="callback"></param>
  17. public static void GetAsync<TResponse>(
  18. string host,
  19. int port,
  20. string controller,
  21. string action,
  22. Dictionary<string, string> query,
  23. Action<TResponse, Exception> callback,
  24. int? timeountMilliseconds = null) {
  25. Task.Factory.StartNew(() => {
  26. try {
  27. using (HttpClient client = RpcRoot.CreateHttpClient()) {
  28. client.SetTimeout(timeountMilliseconds);
  29. Task<HttpResponseMessage> getHttpResponse = client.GetAsync(RpcRoot.GetUrl(host, port, controller, action, query));
  30. if (getHttpResponse.Result.IsSuccessStatusCode) {
  31. getHttpResponse.Result.Content.ReadAsByteArrayAsync().ContinueWith(t => {
  32. callback?.Invoke(VirtualRoot.BinarySerializer.Deserialize<TResponse>(t.Result), null);
  33. });
  34. }
  35. else {
  36. callback?.Invoke(default, new NTMinerException($"{action} http response {getHttpResponse.Result.StatusCode.ToString()} {getHttpResponse.Result.ReasonPhrase}"));
  37. }
  38. }
  39. }
  40. catch (Exception e) {
  41. callback?.Invoke(default, e);
  42. }
  43. });
  44. }
  45. /// <summary>
  46. /// 注意:Request时PostAsJson,Response时ReadAsByteArrayAsync后进行二进制反序列化。
  47. /// </summary>
  48. /// <typeparam name="TResponse"></typeparam>
  49. /// <param name="host">用于组装Url</param>
  50. /// <param name="port">用于组装Url</param>
  51. /// <param name="controller">用于组装Url</param>
  52. /// <param name="action">用于组装Url</param>
  53. /// <param name="callback"></param>
  54. /// <param name="timeountMilliseconds"></param>
  55. public static void PostAsync<TResponse>(
  56. string host,
  57. int port,
  58. string controller,
  59. string action,
  60. Action<TResponse, Exception> callback,
  61. int timeountMilliseconds = 0) {
  62. PostAsync(host, port, controller, action, query: null, data: null, callback, timeountMilliseconds);
  63. }
  64. /// <summary>
  65. /// 注意:Request时PostAsJson,Response时ReadAsByteArrayAsync后进行二进制反序列化。
  66. /// </summary>
  67. /// <typeparam name="TResponse"></typeparam>
  68. /// <param name="host">用于组装Url</param>
  69. /// <param name="port">用于组装Url</param>
  70. /// <param name="controller">用于组装Url</param>
  71. /// <param name="action">用于组装Url</param>
  72. /// <param name="data">post的数据,PostAsJson</param>
  73. /// <param name="callback"></param>
  74. /// <param name="timeountMilliseconds"></param>
  75. public static void PostAsync<TResponse>(
  76. string host,
  77. int port,
  78. string controller,
  79. string action,
  80. object data,
  81. Action<TResponse, Exception> callback,
  82. int timeountMilliseconds = 0) {
  83. PostAsync(host, port, controller, action, query: null, data, callback, timeountMilliseconds);
  84. }
  85. /// <summary>
  86. /// 注意:Request时PostAsJson,Response时ReadAsByteArrayAsync后进行二进制反序列化。
  87. /// </summary>
  88. /// <typeparam name="TResponse"></typeparam>
  89. /// <param name="host">用于组装Url</param>
  90. /// <param name="port">用于组装Url</param>
  91. /// <param name="controller">用于组装Url</param>
  92. /// <param name="action">用于组装Url</param>
  93. /// <param name="signData">用于组装url查询字符串</param>
  94. /// <param name="data">post的数据,PostAsJson</param>
  95. /// <param name="callback"></param>
  96. /// <param name="timeountMilliseconds"></param>
  97. public static void SignPostAsync<TResponse>(
  98. string host,
  99. int port,
  100. string controller,
  101. string action,
  102. object data,
  103. Action<TResponse, Exception> callback,
  104. int timeountMilliseconds = 0) {
  105. PostAsync(host, port, controller, action, query: RpcRoot.RpcUser.GetSignData(data), data, callback, timeountMilliseconds);
  106. }
  107. /// <summary>
  108. /// 注意:Request时PostAsJson,Response时ReadAsByteArrayAsync后进行二进制反序列化。
  109. /// </summary>
  110. /// <typeparam name="TResponse">post的data的类型</typeparam>
  111. /// <param name="host">用于组装Url</param>
  112. /// <param name="port">用于组装Url</param>
  113. /// <param name="controller">用于组装Url</param>
  114. /// <param name="action">用于组装Url</param>
  115. /// <param name="query">Url上的查询参数,承载登录名、时间戳、签名</param>
  116. /// <param name="data">post的数据,PostAsJson</param>
  117. /// <param name="callback"></param>
  118. /// <param name="timeountMilliseconds"></param>
  119. public static void PostAsync<TResponse>(
  120. string host,
  121. int port,
  122. string controller,
  123. string action,
  124. Dictionary<string, string> query,
  125. object data,
  126. Action<TResponse, Exception> callback,
  127. int timeountMilliseconds = 0) {
  128. Task.Factory.StartNew(() => {
  129. try {
  130. using (HttpClient client = RpcRoot.CreateHttpClient()) {
  131. client.SetTimeout(timeountMilliseconds);
  132. Task<HttpResponseMessage> getHttpResponse = client.PostAsJsonAsync(RpcRoot.GetUrl(host, port, controller, action, query), data);
  133. if (getHttpResponse.Result.IsSuccessStatusCode) {
  134. getHttpResponse.Result.Content.ReadAsByteArrayAsync().ContinueWith(t => {
  135. callback?.Invoke(VirtualRoot.BinarySerializer.Deserialize<TResponse>(t.Result), null);
  136. });
  137. }
  138. else {
  139. callback?.Invoke(default, new NTMinerException($"{action} http response {getHttpResponse.Result.StatusCode.ToString()} {getHttpResponse.Result.ReasonPhrase}"));
  140. }
  141. }
  142. }
  143. catch (Exception e) {
  144. callback?.Invoke(default, e);
  145. }
  146. });
  147. }
  148. }
  149. }