HubBase.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. using Microsoft.AspNetCore.SignalR.Client;
  2. namespace EEMSClientCore;
  3. public partial class ClientCaller(IClientBaseProvider baseProvider) : IDisposable
  4. {
  5. private IClientProvider? _clientProvider;
  6. private HubConnection? _HubConnection;
  7. public bool Initialize()
  8. {
  9. if (_HubConnection is not null)
  10. return false;
  11. if (_clientProvider is not null)
  12. return false;
  13. this._clientProvider = new ClientProvider(this, baseProvider);
  14. return true;
  15. }
  16. public bool Open(string ip, int port, string hub, int retry = 40)
  17. {
  18. if (_clientProvider is null)
  19. return false;
  20. HubConnection temp = new HubConnectionBuilder()
  21. .WithUrl($"http://{ip}:{port}/{hub}")
  22. .WithAutomaticReconnect()
  23. .Build();
  24. temp.On<Guid, FileType>("RequestFile", _clientProvider.RequestFile);
  25. for (int i = 1; i <= retry; i++)
  26. {
  27. try
  28. {
  29. temp.StartAsync().Wait();
  30. _HubConnection = temp;
  31. break;
  32. }
  33. catch
  34. {
  35. if (i == retry)
  36. return false;
  37. Thread.Sleep(1000);
  38. }
  39. }
  40. return true;
  41. }
  42. protected bool CheckConnect()
  43. {
  44. if (_HubConnection is null)
  45. return false;
  46. if (_HubConnection.State != HubConnectionState.Connected)
  47. return false;
  48. return true;
  49. }
  50. protected async Task<bool> Send(string name)
  51. {
  52. if (!CheckConnect())
  53. return false;
  54. try
  55. {
  56. await _HubConnection!.SendAsync(name);
  57. }
  58. catch
  59. {
  60. return false;
  61. }
  62. return true;
  63. }
  64. protected async Task<bool> Send<T1>(string name, T1 para1)
  65. {
  66. if (!CheckConnect())
  67. return false;
  68. try
  69. {
  70. await _HubConnection!.SendAsync(name, para1);
  71. }
  72. catch
  73. {
  74. return false;
  75. }
  76. return true;
  77. }
  78. protected async Task<bool> Send<T1, T2>(string name, T1 para1, T2 para2)
  79. {
  80. if (!CheckConnect())
  81. return false;
  82. try
  83. {
  84. await _HubConnection!.SendAsync(name, para1, para2);
  85. }
  86. catch
  87. {
  88. return false;
  89. }
  90. return true;
  91. }
  92. protected async Task<bool> Send<T1, T2, T3>(string name, T1 para1, T2 para2, T3 para3)
  93. {
  94. if (!CheckConnect())
  95. return false;
  96. try
  97. {
  98. await _HubConnection!.SendAsync(name, para1, para2, para3);
  99. }
  100. catch
  101. {
  102. return false;
  103. }
  104. return true;
  105. }
  106. protected async Task<bool> Send<T1, T2, T3, T4>(string name, T1 para1, T2 para2, T3 para3, T4 para4)
  107. {
  108. if (!CheckConnect())
  109. return false;
  110. try
  111. {
  112. await _HubConnection!.SendAsync(name, para1, para2, para3, para4);
  113. }
  114. catch
  115. {
  116. return false;
  117. }
  118. return true;
  119. }
  120. protected bool Invoke<T_Return>(string name, out T_Return? returnValue)
  121. {
  122. returnValue = default;
  123. if (!CheckConnect())
  124. return false;
  125. try
  126. {
  127. returnValue = _HubConnection!.InvokeAsync<T_Return>(name).Result;
  128. }
  129. catch
  130. {
  131. return false;
  132. }
  133. return true;
  134. }
  135. protected bool Invoke<T_Return, T_para1>(string name, T_para1 para1, out T_Return? returnValue)
  136. {
  137. returnValue = default;
  138. if (!CheckConnect())
  139. return false;
  140. try
  141. {
  142. returnValue = _HubConnection!.InvokeAsync<T_Return>(name, para1).Result;
  143. }
  144. catch
  145. {
  146. return false;
  147. }
  148. return true;
  149. }
  150. protected bool Invoke<T_Return, T_para1, T_Para2>(string name, T_para1 para1, T_Para2 para2, out T_Return? returnValue)
  151. {
  152. returnValue = default;
  153. if (!CheckConnect())
  154. return false;
  155. try
  156. {
  157. returnValue = _HubConnection!.InvokeAsync<T_Return>(name, para1, para2).Result;
  158. }
  159. catch
  160. {
  161. return false;
  162. }
  163. return true;
  164. }
  165. protected bool Invoke<T_Return, T_para1, T_Para2, T_Para3>(string name, T_para1 para1, T_Para2 para2, T_Para3 para3, out T_Return? returnValue)
  166. {
  167. returnValue = default;
  168. if (!CheckConnect())
  169. return false;
  170. try
  171. {
  172. returnValue = _HubConnection!.InvokeAsync<T_Return>(name, para1, para2, para3).Result;
  173. }
  174. catch
  175. {
  176. return false;
  177. }
  178. return true;
  179. }
  180. public void Dispose()
  181. {
  182. _HubConnection?.StopAsync().Wait();
  183. _HubConnection = null;
  184. this._clientProvider = null;
  185. }
  186. }