From 38f3880be86755fc532f7c1bae3407cf0e2fe5c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D1=8B=D1=82=D0=BA=D0=BE=D0=B2=20=D0=A0=D0=BE=D0=BC?= =?UTF-8?q?=D0=B0=D0=BD?= Date: Fri, 19 Sep 2025 21:59:58 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=82=D0=BE=D1=87=D0=BA=D0=B8=20=D0=BD=D0=B0?= =?UTF-8?q?=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B8=20=D0=B8?= =?UTF-8?q?=D0=BD=D0=B4=D0=B5=D0=BA=D1=81=20=D0=BA=D0=B0=D0=B4=D1=80=D0=B0?= =?UTF-8?q?=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20=D0=B8=D0=BD=D0=B4?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D0=B0=20=D0=BF=D0=B0=D0=BA=D0=B5=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Domain/Data.cs | 3 ++- Domain/Dto/JsonData.cs | 17 ++++++++++----- Domain/Dto/MessagePackData.cs | 17 ++++++++++----- Domain/OverlayPoints.cs | 40 +++++++++++++++++++++++++++++++++++ Server/DataGenerator.cs | 19 +++++++++-------- 5 files changed, 76 insertions(+), 20 deletions(-) create mode 100644 Domain/OverlayPoints.cs diff --git a/Domain/Data.cs b/Domain/Data.cs index 65ccbcc..4cc1dde 100644 --- a/Domain/Data.cs +++ b/Domain/Data.cs @@ -10,8 +10,9 @@ public record class Data( double? Theta, double? Smr, double? MuWave, + string OverlayPoint, bool? Artifact, double? SignalQuality, - long PackageIndex, + long FrameIndex, DateTime? TimeOfDataGenerate ); \ No newline at end of file diff --git a/Domain/Dto/JsonData.cs b/Domain/Dto/JsonData.cs index 4e2a30a..b73304d 100644 --- a/Domain/Dto/JsonData.cs +++ b/Domain/Dto/JsonData.cs @@ -22,16 +22,21 @@ public class JsonData public double? Smr { get; set; } [JsonPropertyName("muWave")] public double? MuWave { get; set; } + [JsonPropertyName("overlayPoint")] + public string overlayPoint { get; set; } [JsonPropertyName("artifact")] public bool? Artifact { get; set; } [JsonPropertyName("signalQuality")] public double? SignalQuality { get; set; } - [JsonPropertyName("packageIndex")] - public long PackageIndex { get; set; } + [JsonPropertyName("frameIndex")] + public long FrameIndex { get; set; } [JsonPropertyName("timeOfDataGenerate")] public DateTime? TimeOfDataGenerate { get; set; } - public JsonData() { } + public JsonData() + { + overlayPoint = ""; + } public JsonData(Data data) { @@ -44,9 +49,10 @@ public class JsonData Theta = data.Theta; Smr = data.Smr; MuWave = data.MuWave; + overlayPoint = data.OverlayPoint; Artifact = data.Artifact; SignalQuality = data.SignalQuality; - PackageIndex = data.PackageIndex; + FrameIndex = data.FrameIndex; TimeOfDataGenerate = data.TimeOfDataGenerate; } @@ -62,9 +68,10 @@ public class JsonData Theta, Smr, MuWave, + overlayPoint, Artifact, SignalQuality, - PackageIndex, + FrameIndex, TimeOfDataGenerate ); } diff --git a/Domain/Dto/MessagePackData.cs b/Domain/Dto/MessagePackData.cs index 55e4aab..d3b0545 100644 --- a/Domain/Dto/MessagePackData.cs +++ b/Domain/Dto/MessagePackData.cs @@ -23,16 +23,21 @@ public class MessagePackData public double? Smr { get; set; } [Key("muWave")] public double? MuWave { get; set; } + [Key("overlayPoint")] + public string overlayPoint { get; set; } [Key("artifact")] public bool? Artifact { get; set; } [Key("signalQuality")] public double? SignalQuality { get; set; } - [Key("packageIndex")] - public long PackageIndex { get; set; } + [Key("frameIndex")] + public long FrameIndex { get; set; } [Key("timeOfDataGenerate")] public DateTime? TimeOfDataGenerate { get; set; } - public MessagePackData() { } + public MessagePackData() + { + overlayPoint = ""; + } public MessagePackData(Data data) { @@ -45,9 +50,10 @@ public class MessagePackData Theta = data.Theta; Smr = data.Smr; MuWave = data.MuWave; + overlayPoint = data.OverlayPoint; Artifact = data.Artifact; SignalQuality = data.SignalQuality; - PackageIndex = data.PackageIndex; + FrameIndex = data.FrameIndex; TimeOfDataGenerate = data.TimeOfDataGenerate; } @@ -63,9 +69,10 @@ public class MessagePackData Theta, Smr, MuWave, + overlayPoint, Artifact, SignalQuality, - PackageIndex, + FrameIndex, TimeOfDataGenerate ); } diff --git a/Domain/OverlayPoints.cs b/Domain/OverlayPoints.cs new file mode 100644 index 0000000..96a0c65 --- /dev/null +++ b/Domain/OverlayPoints.cs @@ -0,0 +1,40 @@ +namespace Domain; + +public static class OverlayPoints +{ + public static readonly string All = "ALL"; + /// + /// Список всех точек наложения по схеме 10-20 + /// + public static readonly string[] Points = { + "Fp1", "Fp2", "F3", "F4", "Fz", "C3", "C4", "Cz", + "P3", "P4", "Pz", "F7", "F8", "T3", "T4", "T5", "T6", "O1", "O2" + }; + + /// + /// Описания точек наложения + /// + public static readonly Dictionary Descriptions = new() + { + {"Fp1", "переднелобные (prefrontal)"}, + {"Fp2", "переднелобные (prefrontal)"}, + {"F3", "лобные (frontal)"}, + {"F4", "лобные (frontal)"}, + {"Fz", "среднелобный"}, + {"C3", "центральные (central)"}, + {"C4", "центральные (central)"}, + {"Cz", "центральный вертексный"}, + {"P3", "теменные (parietal)"}, + {"P4", "теменные (parietal)"}, + {"Pz", "центральнотеменной"}, + {"F7", "передневисочные"}, + {"F8", "передневисочные"}, + {"T3", "средневисочные (temporal)"}, + {"T4", "средневисочные (temporal)"}, + {"T5", "задневисочные"}, + {"T6", "задневисочные"}, + {"O1", "затылочная (occipital)"}, + {"O2", "затылочная (occipital)"} + }; +} + diff --git a/Server/DataGenerator.cs b/Server/DataGenerator.cs index 3258c4e..4669d28 100644 --- a/Server/DataGenerator.cs +++ b/Server/DataGenerator.cs @@ -31,25 +31,25 @@ public class DataGenerator private void GenerateInBackground(CancellationToken token) { - var firstData = GenerateRandomData(0); + var firstData = GenerateRandomData(0, "ALL"); _cache.AddLast(firstData); - _dict[firstData.PackageIndex] = firstData; + _dict[firstData.FrameIndex] = firstData; while (!token.IsCancellationRequested) { //await Task.Delay(_generationInterval, token); var first = _cache.First!.Value; var last = _cache.Last!.Value; - if (last.PackageIndex - _maxRequestedIndex < _minNewPackages) + if (last.FrameIndex - _maxRequestedIndex < _minNewPackages) { - var data = GenerateRandomData(last.PackageIndex + 1); + var data = GenerateRandomData(last.FrameIndex + 1, "ALL"); _cache.AddLast(data); - _dict[data.PackageIndex] = data; + _dict[data.FrameIndex] = data; } - if (_maxRequestedIndex - first.PackageIndex > _maxPreviousPackages) + if (_maxRequestedIndex - first.FrameIndex > _maxPreviousPackages) { _cache.RemoveFirst(); - _dict.TryRemove(first.PackageIndex, out _); + _dict.TryRemove(first.FrameIndex, out _); } //System.Console.WriteLine($"[{first.PackageIndex}; {last.PackageIndex}]"); } @@ -62,7 +62,7 @@ public class DataGenerator return res ? value : null; } - private Data GenerateRandomData(long packageNumber) + private Data GenerateRandomData(long frameIndex, string overlayPoint) { var alpha = _random.NextDouble(); var beta = _random.NextDouble() * (1 - alpha); @@ -79,9 +79,10 @@ public class DataGenerator Theta: _random.NextDouble() < 0.1 ? null : theta, Smr: _random.NextDouble() < 0.1 ? null : _random.NextDouble(), MuWave: _random.NextDouble() < 0.1 ? null : _random.NextDouble(), + OverlayPoint: overlayPoint, Artifact: _random.NextDouble() < 0.1 ? null : signalQuality < 0.5, SignalQuality: _random.NextDouble() < 0.1 ? null : signalQuality, - PackageIndex: packageNumber, + FrameIndex: frameIndex, TimeOfDataGenerate: _random.NextDouble() < 0.1 ? null : DateTime.Now ); }