using Device; using Microsoft.AspNetCore.SignalR.Client; using System.Threading.Channels; using System.Threading.Tasks; using Universal; namespace TestSignalRClient; internal class HubSender : SenderBase { public bool Initialize(string ip, int port, string hub, int retry = 40) { if (_hubConnection is not null) return false; HubConnection temp = new HubConnectionBuilder() .WithUrl($"http://{ip}:{port}/{hub}") .WithAutomaticReconnect() .Build(); temp.On("RequestFile", RequestFile); //temp.On("UpdateMini8", UpdateMini8); //temp.On("UpdateSingleChannel", receiver.UpdateSingleChannel); //temp.On>("UpdateChannel", receiver.UpdateChannels); //temp.On("UpdateFiles", receiver.UpdateFiles); //temp.On("ClearFiles", receiver.ClearFiles); //temp.On("UpdateAddress", receiver.UpdateAddress); //temp.On("CurrentFile", receiver.CurrentFile); //temp.On("AlarmNotify", receiver.AlarmNotify); //temp.On("AlarmTcBrockenNotify", receiver.AlarmTcBrockenNotify); //temp.On("Mini8Connect", receiver.Mini8Connect); //temp.On("UpdateDataBaseInfo", receiver.UpdateDataBaseInfo); //temp.On("ChannelDataUpdate", receiver.ChannelDataUpdate); //temp.ServerTimeout = TimeSpan.FromSeconds(5.0); for (int i = 1; i <= retry; i++) { try { temp.StartAsync().Wait(); _hubConnection = temp; break; } catch { if (i == retry) return false; Thread.Sleep(1000); } } DeviceInfo deviceInfo = new() { DeviceModel = GeneralData.DeviceModel.Proxima, DeviceSubModel = "Test", DeviceName = "TestName", IP = "127.0.0.1", Port = 50002, UpdateTime = DateTime.Now }; base.Invoke("RegisterDevice", deviceInfo, out Guid returnValue); Console.WriteLine(returnValue); return true; } private async Task RequestFile(Guid guid, int i) { Console.WriteLine($"RequestFile {guid} {i}"); using MemoryStream stream = new(); Compressor.CompressZipFileDirectory(new(@"E:\Recipes"), stream); await SendFile(guid, stream); } public async Task SendFile(Guid guid, MemoryStream stream) { if (!stream.Split(out List? buffer, 8192) || buffer is null) return false; for (int i = 0; i < buffer.Count; i++) { if (!await base.Send("FilePack", guid, buffer[i], i + 1, buffer.Count)) return false; } return true; } }