HubBase.cs 5.0 KB

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