示例#1
0
 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);
 }
示例#2
0
        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();
        }
示例#3
0
        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();
        }