From f23a8a97126cebf508070875072894b707bd3e2c Mon Sep 17 00:00:00 2001 From: SikongJueluo Date: Wed, 20 Aug 2025 15:28:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=A4=BA=E6=B3=A2?= =?UTF-8?q?=E5=99=A8WebSocket=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/Hubs/OscilloscopeHub.cs | 56 ++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/server/src/Hubs/OscilloscopeHub.cs b/server/src/Hubs/OscilloscopeHub.cs index 8b68530..219cfef 100644 --- a/server/src/Hubs/OscilloscopeHub.cs +++ b/server/src/Hubs/OscilloscopeHub.cs @@ -117,7 +117,7 @@ public class OscilloscopeHub : Hub, IOscilloscopeHub try { var board = TryGetBoard().OrThrow(() => new Exception("Board not found")); - var client = new OscilloscopeCtrl(board.IpAddr, board.Port, 0); + var client = new OscilloscopeCtrl(board.IpAddr, board.Port); return client; } catch (Exception ex) @@ -148,6 +148,25 @@ public class OscilloscopeHub : Hub, IOscilloscopeHub } } + private Task ScanTask(OscilloscopeScanTaskInfo taskInfo, CancellationToken token) + { + return Task.Run(async () => + { + while (!token.IsCancellationRequested) + { + var data = await GetCaptureData(taskInfo.Client); + if (data == null) + { + logger.Error("GetData failed"); + continue; + } + + await _hubContext.Clients.Client(Context.ConnectionId).OnDataReceived(data); + await Task.Delay(1000 / taskInfo.Frequency, token); + } + }, token); + } + public async Task StartCapture() { try @@ -168,21 +187,7 @@ public class OscilloscopeHub : Hub, IOscilloscopeHub var scanTaskInfo = new OscilloscopeScanTaskInfo(client); var token = scanTaskInfo.CTS.Token; - scanTaskInfo.ScanTask = Task.Run(async () => - { - while (!token.IsCancellationRequested) - { - var data = await GetData(); - if (data == null) - { - logger.Error("GetData failed"); - continue; - } - - await Clients.Client(Context.ConnectionId).OnDataReceived(data); - await Task.Delay(1000 / scanTaskInfo.Frequency, token); - } - }, token); + scanTaskInfo.ScanTask = ScanTask(scanTaskInfo, token); _scanTasks[key] = scanTaskInfo; @@ -229,12 +234,10 @@ public class OscilloscopeHub : Hub, IOscilloscopeHub } } - public async Task GetData() + private async Task GetCaptureData(OscilloscopeCtrl oscilloscope) { try { - var oscilloscope = GetOscilloscope().OrThrow(() => new Exception("用户未绑定有效的实验板")); - var freqResult = await oscilloscope.GetADFrequency(); var vppResult = await oscilloscope.GetADVpp(); var maxResult = await oscilloscope.GetADMax(); @@ -296,6 +299,21 @@ public class OscilloscopeHub : Hub, IOscilloscopeHub } } + public async Task GetData() + { + try + { + var oscilloscope = GetOscilloscope().OrThrow(() => new Exception("Oscilloscope not found")); + var response = await GetCaptureData(oscilloscope); + return response; + } + catch (Exception ex) + { + logger.Error(ex, "获取示波器数据时发生异常"); + return null; + } + } + public async Task SetTrigger(byte level) { try