Files
NetworkTest/Client/FrameAssembler.cs

40 lines
1.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using Domain;
namespace Client;
public class FrameAssembler
{
private readonly Action<List<Data>> _frameCallback;
private readonly Dictionary<long, Dictionary<string, Data>> _frames = new();
private const int FrameSize = 9;
public FrameAssembler(Action<List<Data>> 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<string, Data>();
}
_frames[frameIndex][overlayPoint] = data; // Overwrite if duplicate
if (_frames[frameIndex].Count == FrameSize)
{
List<Data> frameData = _frames[frameIndex].Values
.OrderBy(d => d.OverlayPoint)
.ToList();
_frameCallback(frameData);
_frames.Remove(frameIndex);
}
}
}