using System; using System.Collections.Generic; using System.Linq; using Domain; namespace Client; public class FrameAssembler { private readonly Action> _frameCallback; private readonly Dictionary> _frames = new(); private const int FrameSize = 9; public FrameAssembler(Action> frameCallback) { _frameCallback = frameCallback ?? throw new ArgumentNullException(nameof(frameCallback)); } public void AddData(Data data) { long frameIndex = data.FrameIndex; string overlayPoint = data.OverlayPoint; if (!_frames.ContainsKey(frameIndex)) { _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); } } }