private static byte[] ConstructMessage(object data, TrameId id) { List <byte> trame = new List <byte>(); // Ajout de l'ID à la trame trame.Add((byte)id); // Ajoute une valeur par défaut sur les 4 bytes reservé aux data pour que la structure de la trame soit toujours correcte var placeholder = BitConverter.GetBytes((int)data); trame.AddRange(placeholder); return(trame.ToArray()); }
private static byte[] ConstructPath(PointData[] path, TrameId id) { List <byte> trame = new List <byte>(); // Ajout de l'ID à la trame trame.Add((byte)id); // Ajout du nombre de points codé sur 2 bytes var pointsCount = (ushort)path.Length; trame.AddRange(BitConverter.GetBytes(pointsCount)); // Ajout de tous les x et y // chaque point est composé de 1 x puis 1 y chacun codé sur un double de 8 bytes for (int i = 0; i < path.Length; i++) { trame.AddRange(BitConverter.GetBytes(path[i].Xd)); trame.AddRange(BitConverter.GetBytes(path[i].Yd)); } return(trame.ToArray()); }
public static object Deconstruct(byte[] trame, out TrameId trameId) { // Valeurs par défaut des objets qui seront envoyés si il y a un problème avec le dechiffrage de la trame object result = new object(); trameId = TrameId.Null; indiceTrame = 0; try { // Lecture du premier byte qui correspond TOUJOURS à l'Id byte id = trame[indiceTrame]; trameId = (TrameId)id; indiceTrame++; switch (trameId) { case TrameId.Configuration: result = DeconstructConfiguration(trame); break; case TrameId.Positions: result = DeconstructPoint(trame); break; case TrameId.Positions2: result = DeconstructPoint(trame); break; case TrameId.Forces: result = DeconstructPoint(trame); break; case TrameId.Forces2: result = DeconstructPoint(trame); break; case TrameId.PauseGame: result = DeconstructMessage(trame); break; case TrameId.StopGame: result = DeconstructMessage(trame); break; case TrameId.SetValue: result = DeconstructValue(trame); break; case TrameId.Null: break; default: break; } } catch (Exception) { } return(result); }