//Focntion permettant de faire la demande de fermeture de toutes les connexions, utilisée à la fin d'exécution des commandes //du fichier S_lec.txt public void DemanderFermetureConnexions() { while (connexions.nbConnexions > 0) { //Fermeture d'une connexion ConnexionTransport conn = connexions.findConnexionAtIndex(0); ecrire_vers_reseau(conn.getNumeroConnexion() + ";" + N_DISCONNECT.req + ";" + conn.getAdresseDestination()); connexions.FermerConnexion(conn.getNumeroConnexion(), "Fin d'exécution"); } }
//Fonction permettant d'établir une connexion avec un distant public void EtablirConnexion(string _identifiant) { ConnexionTransport conn = connexions.EtablirConnexion(_identifiant); //Tentative d'ouverture de connexion if (conn != null) { int numConn = conn.getNumeroConnexion(); int addrSource = conn.getAdresseSource(); int addrDestinataire = conn.getAdresseDestination(); //Envoie de la primitive de demande de connexion vers la couche Réseau Utility.EcrireDansFichier("S_ecr.txt", "Ouverture de connexion pour " + _identifiant + "...", true); ecrire_vers_reseau(numConn + ";" + N_CONNECT.req + ";" + addrSource + ";" + addrDestinataire); } }
//Fonction permettant de trouver une connexion selon son numéro de connexion public ConnexionTransport this[int numConn] { get { ConnexionTransport conn = null; sem.WaitOne(); //Blocage for (int i = 0; i < listeConnexions.Count; i++) { try{ ConnexionTransport c = listeConnexions[i]; if (c.getNumeroConnexion() == numConn) { conn = c; break; } }catch (IndexOutOfRangeException e) { break; } } sem.Release(); //Déblocage return(conn); } }