using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Text; namespace EFBTracker.Tracking { public class Packet { private string Type { get; set; } private float[]? Data { get; set; } public Packet(string type, float[] data){ Type = type; Data = data; } public static Packet[]? ReadPackets(byte[] data){ if((data.Length - 5) % 36 == 0){//If there are correctly sized packets int packetPos = 0; List packets = new List(); //Next 4 bytes are packet header string header = Encoding.UTF8.GetString(data, packetPos, 4); packetPos += 5; while(packetPos < data.Length) { int id = BitConverter.ToInt32(data, packetPos); packetPos += 4; //Array to take 4 values float[] values = new float[4]; for (var i = 0; i < values.Length; i++) {//Read 4 values from packet and save into array var value = BitConverter.ToSingle(data, packetPos); values[i] = value; packetPos += 8; } //Generate new packet object and add to list packets.Add(new Packet(header, values)); } return packets.ToArray(); } return null; } } }