diff --git a/Client/FrameAssembler.cs b/Client/FrameAssembler.cs index 5618de6..5d4186e 100644 --- a/Client/FrameAssembler.cs +++ b/Client/FrameAssembler.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using Domain; namespace Client; @@ -7,7 +8,7 @@ namespace Client; public class FrameAssembler { private readonly Action> _frameCallback; - private readonly List _buffer = new List(); + private readonly Dictionary> _frames = new(); private const int FrameSize = 9; public FrameAssembler(Action> frameCallback) @@ -17,11 +18,23 @@ public class FrameAssembler public void AddData(Data data) { - _buffer.Add(data); - if (_buffer.Count >= FrameSize) + long frameIndex = data.FrameIndex; + string overlayPoint = data.OverlayPoint; + + if (!_frames.ContainsKey(frameIndex)) { - _frameCallback(new List(_buffer)); - _buffer.Clear(); + _frames[frameIndex] = new Dictionary(); + } + + _frames[frameIndex][overlayPoint] = data; // Overwrite if duplicate + + if (_frames[frameIndex].Count == FrameSize) + { + List frameData = _frames[frameIndex].Values + .OrderBy(d => d.OverlayPoint) + .ToList(); + _frameCallback(frameData); + _frames.Remove(frameIndex); } } } \ No newline at end of file