public Bits(Trame trame) { bits = new bool[24]; bytesToBoolArray(trame.Numero).CopyTo(bits, 0); bytesToBoolArray(trame.Data).CopyTo(bits, 8); bytesToBoolArray(trame.type).CopyTo(bits, 16); }
public void Traiter() { int data = 0; Trame trame = new Trame(0, 255, TYPE_TRAME.DATA); Trame notif = new Trame(0, 255, TYPE_TRAME.DATA); while (data >= 0) { if (support.PretEmettreSource) { // Verifier les timeout int timeout = trouverTimeout(); if (timeout != -1) { index = timeout; afficher("Timeout sur : " + fenetres[index].ToString()); resetTimeout(); } // Lire le data et creer trame else if (fenetres[index = (index + 1) % fenetres.Length] == null) { data = reader.ReadByte(); if (data == -1 && fenetreVide()) { break; // End of file } if (data != -1) { //index = (index + 1) % fenetres.Length; trame = new Trame(NumeroterTrame(), data, TYPE_TRAME.DATA); fenetres[index] = trame; } } if (fenetres[index] != null) { afficher("Index : " + index.ToString()); afficher("Envoyée : " + fenetres[index].ToString()); support.EmettreDonnee(Bits.Codifier(new Bits(fenetres[index]))); } } // Reception des ACK/NAK if (support.DonneeRecueSource) { notif = Bits.Decoder(support.RecevoirNotif()).toTrame(); afficher("Reçue : " + notif.ToString()); retirerTrame(notif.Data); } } EnvoyerSignalFin(); reader.Close(); reader.Dispose(); }
public void Traiter() { Trame trame = new Trame(0, 255, TYPE_TRAME.DATA); while (!trame.IsEnd()) { if (support.DonneeRecueDestination) { Bits data = support.RecevoirDonnee(); if (Config.ConfigInstance.CodeCorrecteur || Bits.Verifier(data) == 0) { trame = Bits.Decoder(data).toTrame(); if (trame.IsEnd()) { break; // End of transmission } if (trame.Numero == prochaineTrame) { afficher("Reçue : " + trame.ToString()); writer.WriteByte(trame.Data); EnvoyerACK(trame.Numero); prochaineTrame = (prochaineTrame + 1) % 256; } else { afficher("Trame rejetée"); } } else { afficher("ERREUR"); } } } afficher("Fin du thread Recepteur"); writer.Close(); writer.Dispose(); }