HubSender.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using Microsoft.AspNetCore.SignalR.Client;
  2. using System.Threading.Channels;
  3. using System.Threading.Tasks;
  4. using Universal;
  5. namespace TestSignalRClient;
  6. internal class HubSender : SenderBase
  7. {
  8. public bool Initialize(string ip, int port, string hub, int retry = 40)
  9. {
  10. if (_hubConnection is not null)
  11. return false;
  12. HubConnection temp = new HubConnectionBuilder()
  13. .WithUrl($"http://{ip}:{port}/{hub}")
  14. .WithAutomaticReconnect()
  15. .Build();
  16. //temp.On<byte, Mini8Data>("UpdateMini8", UpdateMini8);
  17. //temp.On<byte, byte, ChannelData>("UpdateSingleChannel", receiver.UpdateSingleChannel);
  18. //temp.On<byte, List<ChannelData>>("UpdateChannel", receiver.UpdateChannels);
  19. //temp.On<TemperatureConfig>("UpdateFiles", receiver.UpdateFiles);
  20. //temp.On("ClearFiles", receiver.ClearFiles);
  21. //temp.On<byte, Mini8Address>("UpdateAddress", receiver.UpdateAddress);
  22. //temp.On<TemperatureConfig>("CurrentFile", receiver.CurrentFile);
  23. //temp.On<byte, byte, float>("AlarmNotify", receiver.AlarmNotify);
  24. //temp.On<byte, byte>("AlarmTcBrockenNotify", receiver.AlarmTcBrockenNotify);
  25. //temp.On<byte, bool>("Mini8Connect", receiver.Mini8Connect);
  26. //temp.On<int, DateTime>("UpdateDataBaseInfo", receiver.UpdateDataBaseInfo);
  27. //temp.On<byte, byte, ChannelData>("ChannelDataUpdate", receiver.ChannelDataUpdate);
  28. //temp.ServerTimeout = TimeSpan.FromSeconds(5.0);
  29. for (int i = 1; i <= retry; i++)
  30. {
  31. try
  32. {
  33. temp.StartAsync().Wait();
  34. _hubConnection = temp;
  35. break;
  36. }
  37. catch
  38. {
  39. if (i == retry)
  40. return false;
  41. Thread.Sleep(1000);
  42. }
  43. }
  44. return true;
  45. }
  46. public async Task<bool> SendFile(Guid guid, MemoryStream stream)
  47. {
  48. if (!stream.Split(out List<byte[]>? buffer, 8192) || buffer is null)
  49. return false;
  50. for (int i = 0; i < buffer.Count; i++)
  51. {
  52. if (!await base.Send<Guid, byte[], int, int>("FilePack", guid, buffer[i], i + 1, buffer.Count))
  53. return false;
  54. }
  55. return true;
  56. }
  57. }