private byte?receiveData(Paquet paquetRecu) { Random rnd = new Random(); //Ne retourne rien si l'adresse source est un multiple de 15 if ((paquetRecu.getSrc() % 15) == 0) { writeLog(".....simulation de non reponse....."); Thread.Sleep(1500); //simulation de non-reponse return(null); } //Acquitement négatif else if ((int)((paquetRecu.getType() >> 1) & 0x07) == rnd.Next(0, 7)) { writeLog("paquet de données invalide reçu de " + paquetRecu.getSrc() + "\t\t" + DateTime.Now); return((byte?)((paquetRecu.getType() & 0xE0) | 0x09)); } //Acquitement Positif else { //S'il n'y a qu'une seule trame / dernier paquet if ((paquetRecu.getType() & 0x10) == 0) { trameComplete += (Encoding.ASCII.GetString(paquetRecu.getPaquet(), 2, 128)); //Fin de la trame writeData(trameComplete); trameComplete = ""; writeLog("Paquet de données reçu #" + (paquetRecu.getType() >> 5) + ". Prochain: #" + ((paquetRecu.getType() & 0x0E) >> 1) + ". source: " + paquetRecu.getSrc() + "\t\t" + DateTime.Now); return((byte?)((paquetRecu.getType() & 0xE0) | 0x01)); } //Sinon paquet d'une suite trameComplete += (Encoding.ASCII.GetString(paquetRecu.getPaquet(), 2, 128)); writeLog("Paquet de données reçu #" + (paquetRecu.getType() >> 5) + ". Prochain: #" + ((paquetRecu.getType() & 0x0E) >> 1) + ". source: " + paquetRecu.getSrc() + "\t\t" + DateTime.Now); return((byte?)((paquetRecu.getType() & (0x0E << 4)) | 0x01)); } }
private byte?establishConnexion(Paquet paquetRecu) { //writeData("tentative de connexion Source: " + ((int)paquetRecu.getSrc()).ToString() + ", Destination: " + ((int)paquetRecu.getDest()).ToString() + "\t\t" + DateTime.Now); //Pas de réponse if ((int)paquetRecu.getSrc() % 19 == 0) { writeLog(".....simulation de non reponse....."); Thread.Sleep(1500); //simulation de non-reponse return(null); } //Connexion refusée else if ((int)paquetRecu.getSrc() % 13 == 0) { writeLog("Connexion refusée " + DateTime.Now); return(Constantes.N_DISCONNECT_IND); } //Connexion établie else { writeLog("Connexion établie " + DateTime.Now); return(Constantes.N_CONNECT_IND); } }
private Paquet liaisonDonnees(Paquet paquetRecu) { int triesCount; switch (paquetRecu.getType()) { case Constantes.N_CONNECT_REQ: triesCount = 0; byte?connexion = tryWithTemp(establishConnexion, paquetRecu, ref triesCount); //Si le distant à refusé la connexion if (connexion == Constantes.N_DISCONNECT_IND) { etat = Constantes.DECONNECTE; writeData("paquet d'indication liberation"); return(new PaquetIndicationLiberation(paquetRecu.getNoConn(), paquetRecu.getSrc(), paquetRecu.getDest(), 0x01)); } //Si le distant a accepté la connexion else if (connexion == Constantes.N_CONNECT_IND) { etat = Constantes.CONNECTE; writeData("paquet de connexion etablie"); return(new PaquetConnexionEtablie(paquetRecu.getNoConn(), paquetRecu.getSrc(), paquetRecu.getDest())); } //Si le distant ne répond pas (connexion = null quand trop long, voir tryWithTemp) else if (connexion == null) { etat = Constantes.DECONNECTE; writeData("paquet d'indication liberation"); return(new PaquetIndicationLiberation(paquetRecu.getNoConn(), paquetRecu.getSrc(), paquetRecu.getDest(), 0x01)); } break; //Pour une demande de déconnexion case Constantes.N_DISCONNECT_REQ: writeLog("Demande de déconnexion Source: " + paquetRecu.getSrc() + "\t\t" + DateTime.Now); writeData("paquet d'indication liberation"); return(new PaquetIndicationLiberation(paquetRecu.getNoConn(), paquetRecu.getSrc(), paquetRecu.getDest(), 0x01)); break; //Data default: byte?retourData = receiveData(paquetRecu); if ((retourData & 0x09) == 0x09) { //Aquittement negatif writeData("paquet d'aqcuittement negatif"); return(new PaquetAcquittementNegatif(paquetRecu.getNoConn(), (byte)(retourData >> 5))); } else if ((retourData & 0x09) == 0x01) { //Acquittement positif writeData("paquet d'aqcuittement positif"); return(new PaquetAcquittement(paquetRecu.getNoConn(), (byte)(retourData >> 5))); } break; } return(null); }