// Décode (statiquement) un tableau de bytes, pour y avoir une instance d'un paquet public static bool Decoder(byte[] Data, out absPaquet Paquet) { Paquet = null; object paquetInst; TypePaquet type; Type t; if (Data.Length < 2) { return(false); } type = (TypePaquet)Data[1]; // Un petit peu de cassage de tête (J'avais bien l'intention de tout faire par réflection, mais bon..) IEnumerator <Type> Enumerator = s_lClassesEnfant.GetEnumerator(); while (Enumerator.MoveNext()) { t = Enumerator.Current; // Recherche du bon type de trame if (getTypePaquet(t) == type) { // Lorsqu'on le trouve, on l'instancie paquetInst = Activator.CreateInstance(t); if (paquetInst is absPaquet) { Paquet = (absPaquet)paquetInst; // Si le paquet est décodable (le format est bon) if (!Paquet.Decode(Data)) { return(false); } return(true); } } } return(false); }
// Encode statiquement un paquet pour y avoir le tableau d'octets public static bool Encoder(absPaquet Paquet, out byte[] Data) { return(Paquet.Encode(out Data)); }