//Fonction permettant de confirmer une connexion
        public void ConfirmerConnexion(int _numConn)
        {
            ConnexionTransport conn = this[_numConn];

            conn.setEtatConnexion(EtatConnexion.CONNECTE);

            //Affichage en console et écriture dans le fichier de sortie
            Utility.AfficherDansConsole("Connexion établie pour " + conn.getIdentifiant(), Constantes.OUTPUT_COLOR);
            Utility.EcrireDansFichier("S_ecr.txt", "Connexion établie pour " + conn.getIdentifiant(), true);
        }
예제 #2
0
 //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");
     }
 }
예제 #3
0
        //Fonction permettant de traiter une primitive envoyée par la couche Réseau
        private void TraiterCommandeDeReseau(string commande)
        {
            string[]           split           = commande.Split(';');
            int                numeroConnexion = Int32.Parse(split [0]);
            ConnexionTransport conn            = connexions[numeroConnexion];

            if (split [1] == N_CONNECT.conf.ToString())                                         //Confirmation de connexion
            {
                connexions.ConfirmerConnexion(numeroConnexion);
            }
            else if (split [1] == N_DISCONNECT.ind.ToString())                          //Indication de déconnexion
            {
                connexions.FermerConnexion(numeroConnexion, split[3]);
            }
        }
예제 #4
0
        //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);
            }
        }
        //Fermeture d'une connexion selon son numéro de connexion
        public void FermerConnexion(int _numConn, String raison)
        {
            ConnexionTransport conn = this [_numConn];

            sem.WaitOne();      //Blocage
            listeConnexions.Remove(conn);

            //Libération des adresses utilisées
            adressesUtilises [conn.getAdresseSource()]      = false;
            adressesUtilises [conn.getAdresseDestination()] = false;
            nbAdressesUtilises -= 2;

            sem.Release();      //Déblocage

            //Affichage en console et écriture dans le fichier de sortie
            Utility.AfficherDansConsole("Fermeture de connexion pour " + conn.getIdentifiant() + " - " + raison, Constantes.OUTPUT_COLOR);
            Utility.EcrireDansFichier("S_ecr.txt", "Fermeture de connexion pour " + conn.getIdentifiant() + " - " + raison, true);
        }
        //Fonction permettant d'établir une nouvelle connexion
        public ConnexionTransport EtablirConnexion(string _identifiant)
        {
            //On génère deux adresses
            int adresseSource       = GenererAdresse();
            int adresseDestinataire = GenererAdresse();

            //Plus d'adresses disponibles
            if (adresseSource == -1 || adresseDestinataire == -1)
            {
                Utility.AfficherDansConsole("Plus d'adresses disponibles! Impossible d'établir la connexion.", Constantes.ERREUR_COLOR);
                return(null);
            }

            sem.WaitOne();      //Blocage
            ConnexionTransport conn = new ConnexionTransport(nbConnexionsTotales, _identifiant, adresseSource, adresseDestinataire);

            listeConnexions.Add(conn);
            nbConnexionsTotales++;
            sem.Release();      //Déblocage

            return(conn);
        }
        //Fonction permettant de trouver une connexion selon son identifiant d'application
        public ConnexionTransport this[String identifiant]
        {
            get
            {
                ConnexionTransport conn = null;
                sem.WaitOne();  //Blocage
                for (int i = 0; i < listeConnexions.Count; i++)
                {
                    try{
                        ConnexionTransport c = listeConnexions[i];
                        if (c.getIdentifiant().Equals(identifiant))
                        {
                            conn = c;
                            break;
                        }
                    }catch (IndexOutOfRangeException e) {
                        break;
                    }
                }
                sem.Release();  //Déblocage

                return(conn);
            }
        }
        //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);
            }
        }