HubBase.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  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. temp.On<Guid, FileType, byte[], int, int>("PushFile", _clientProvider.PushFile);
  26. for (int i = 1; i <= retry; i++)
  27. {
  28. try
  29. {
  30. temp.StartAsync().Wait();
  31. _HubConnection = temp;
  32. break;
  33. }
  34. catch
  35. {
  36. if (i == retry)
  37. return false;
  38. Thread.Sleep(1000);
  39. }
  40. }
  41. return true;
  42. }
  43. protected bool CheckConnect()
  44. {
  45. if (_HubConnection is null)
  46. return false;
  47. if (_HubConnection.State != HubConnectionState.Connected)
  48. return false;
  49. return true;
  50. }
  51. protected async Task<bool> Send(string name)
  52. {
  53. if (!CheckConnect())
  54. return false;
  55. try
  56. {
  57. await _HubConnection!.SendAsync(name);
  58. }
  59. catch
  60. {
  61. return false;
  62. }
  63. return true;
  64. }
  65. protected async Task<bool> Send<T1>(string name, T1 para1)
  66. {
  67. if (!CheckConnect())
  68. return false;
  69. try
  70. {
  71. await _HubConnection!.SendAsync(name, para1);
  72. }
  73. catch
  74. {
  75. return false;
  76. }
  77. return true;
  78. }
  79. protected async Task<bool> Send<T1, T2>(string name, T1 para1, T2 para2)
  80. {
  81. if (!CheckConnect())
  82. return false;
  83. try
  84. {
  85. await _HubConnection!.SendAsync(name, para1, para2);
  86. }
  87. catch
  88. {
  89. return false;
  90. }
  91. return true;
  92. }
  93. protected async Task<bool> Send<T1, T2, T3>(string name, T1 para1, T2 para2, T3 para3)
  94. {
  95. if (!CheckConnect())
  96. return false;
  97. try
  98. {
  99. await _HubConnection!.SendAsync(name, para1, para2, para3);
  100. }
  101. catch
  102. {
  103. return false;
  104. }
  105. return true;
  106. }
  107. protected async Task<bool> Send<T1, T2, T3, T4>(string name, T1 para1, T2 para2, T3 para3, T4 para4)
  108. {
  109. if (!CheckConnect())
  110. return false;
  111. try
  112. {
  113. await _HubConnection!.SendAsync(name, para1, para2, para3, para4);
  114. }
  115. catch
  116. {
  117. return false;
  118. }
  119. return true;
  120. }
  121. protected bool Invoke<T_Return>(string name, out T_Return? returnValue)
  122. {
  123. returnValue = default;
  124. if (!CheckConnect())
  125. return false;
  126. try
  127. {
  128. returnValue = _HubConnection!.InvokeAsync<T_Return>(name).Result;
  129. }
  130. catch
  131. {
  132. return false;
  133. }
  134. return true;
  135. }
  136. protected bool Invoke<T_Return, T_para1>(string name, T_para1 para1, out T_Return? returnValue)
  137. {
  138. returnValue = default;
  139. if (!CheckConnect())
  140. return false;
  141. try
  142. {
  143. returnValue = _HubConnection!.InvokeAsync<T_Return>(name, para1).Result;
  144. }
  145. catch
  146. {
  147. return false;
  148. }
  149. return true;
  150. }
  151. protected bool Invoke<T_Return, T_para1, T_Para2>(string name, T_para1 para1, T_Para2 para2, out T_Return? returnValue)
  152. {
  153. returnValue = default;
  154. if (!CheckConnect())
  155. return false;
  156. try
  157. {
  158. returnValue = _HubConnection!.InvokeAsync<T_Return>(name, para1, para2).Result;
  159. }
  160. catch
  161. {
  162. return false;
  163. }
  164. return true;
  165. }
  166. 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)
  167. {
  168. returnValue = default;
  169. if (!CheckConnect())
  170. return false;
  171. try
  172. {
  173. returnValue = _HubConnection!.InvokeAsync<T_Return>(name, para1, para2, para3).Result;
  174. }
  175. catch
  176. {
  177. return false;
  178. }
  179. return true;
  180. }
  181. public void Dispose()
  182. {
  183. _HubConnection?.StopAsync().Wait();
  184. _HubConnection = null;
  185. this._clientProvider = null;
  186. }
  187. }