Advertisement
Guest User

Untitled

a guest
Jan 21st, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.04 KB | None | 0 0
  1. /**
  2. * @file main.cpp
  3. * @brief fichier main du projet sp6
  4. * @author Samy Letombe, Nathan Pellissiere, Mohammed Senhadji
  5. * @version 1 20/12/17
  6. */
  7.  
  8. #include <cassert>
  9. #include <iostream>
  10. #include <fstream>
  11. #include <string>
  12. #include <sys/stat.h>
  13. using namespace std;
  14. #include "Messagerie.h"
  15. #include "Date.h"
  16. #include "Heure.h"
  17. #include "FileAPriorité.h"
  18.  
  19. /**
  20. * @brief Initialise la messagerie
  21. * @param[in-out] Messagerie à initialiser
  22. */
  23. void initialiser(Messagerie& mes) {
  24.     initialiser(mes.listeMes, 1, 1);
  25. }
  26.  
  27. /**
  28. * @brief Détruit/désalloue la messagerie
  29. * @param[in-out] Messagerie à détruire
  30. */
  31. void detruire(Messagerie& mes) {
  32.     for (unsigned int i = 0; i < longueur(mes.listeMes); i++) {
  33.         detruire(lire(mes.listeMes, i).fileB);
  34.     }
  35.     detruire(mes.listeMes);
  36. }
  37.  
  38. /**
  39. * @brief Traite le PaquetReseau dans la messagerie
  40. * @param[in-out] Messagerie
  41. * @param[in] PaquetReseau à traiter
  42. */
  43. void TraiterPaquetReseau(Messagerie& mes, const PaquetReseau& paqres, std::ostream& os, const unsigned int a) {
  44.     unsigned int i = 0;
  45.     MessageEnCours item;
  46.     bool first;
  47.     int pos = 0;
  48.     bool correspondance = false;
  49.     // permet de voir si le messages sont déjà dans une messagerie en cours
  50.     while (i < longueur(mes.listeMes) && correspondance == false) {
  51.         if (estEgal(lire(mes.listeMes, i).idMes, paqres.IdMes)) {
  52.             correspondance = true;
  53.         }
  54.         else i++;
  55.     }
  56.     // si elle n'est pas dans une messagerie en cours, ça en crée une
  57.     if (correspondance == false) {
  58.         item.idMes = paqres.IdMes;
  59.         item.LgMes = 0;
  60.         item.nbPRecus = 0;
  61.         initialiser(item.fileB, 10 );
  62.         inserer(mes.listeMes, i, item);
  63.         os << a << " Detection de nouveau message " << paqres.IdMes.exp << ' ' << paqres.IdMes.dest << ' ';
  64.         ecrire_date(os, paqres.IdMes.date);
  65.         os << ' ';
  66.         ecrire_heure(os, paqres.IdMes.heure);
  67.         os << ' ' << paqres.noPR << ' ' << paqres.finMess << endl;
  68.  
  69.     }
  70.     // sinon ça la stock
  71.    
  72.     item= lire(mes.listeMes, i);
  73.     entrer(item.fileB, paqres.blocD);
  74.     item.nbPRecus++;
  75.     item.LastPRecu = paqres.noPR;
  76.  
  77.    
  78.     // Permet de detecter la fin de message
  79.     if (paqres.finMess == 1) {
  80.         os << a << " Detection de fin de message " << paqres.IdMes.exp << ' ' << paqres.IdMes.dest << ' ';
  81.         ecrire_date(os, paqres.IdMes.date);
  82.         os << ' ';
  83.         ecrire_heure(os, paqres.IdMes.heure);
  84.         os << ' ' << paqres.noPR << ' ' << paqres.finMess << endl;
  85.         item.LgMes = paqres.blocD.noBloc;
  86.  
  87.  
  88.  
  89.     }
  90. ecrire(mes.listeMes, i, item);
  91.     // Permet de faire l'archivage dans le log.txt et de crée un fichier mailbox*.txt
  92.     if (item.nbPRecus == item.LgMes) {
  93.         os << a << " Archivage mailbox " << item.idMes.dest << ' ';
  94.         ecrire_date(os, mes.listeMes.c.tab->idMes.date);
  95.         os << ' ';
  96.         ecrire_heure(os, item.idMes.heure);
  97.         os << endl;
  98.         char test[20];
  99.         sprintf_s(test, "Mailbox %s.txt", item.idMes.dest);
  100.         ofstream ko(test, ios::ate | ios::app);
  101.        
  102.        
  103.         /*
  104.         Permet d'écrire dans les mailbox . txt
  105.         */
  106.         if (ko) {
  107.             //Avoir la position du curseur
  108.              pos = ko.tellp();
  109.             //Si la messagerie vient d'être créé, la nommer
  110.             if (pos == 0) ko << "Mailbox " << lire(mes.listeMes, i).idMes.dest << endl  ;
  111.             //écrire dans la mailbox le message reçu
  112.             ecrire_mec(ko, lire(mes.listeMes, i));
  113.         }
  114.        
  115.    
  116.        
  117.         }
  118.     /*
  119.     Permet de verifier les pertes de paquets
  120.     */
  121.     for (unsigned int j = 0; j < longueur(mes.listeMes); j++) {
  122.         if (paqres.noPR >= lire(mes.listeMes, j).LastPRecu + 10) {
  123.             os << paqres.noPR << " Perte de paquet, suppression de message ";
  124.             ecrire_id(os, lire(mes.listeMes, j).idMes);
  125.             os << '\n';
  126.             supprimer(mes.listeMes, j);
  127.         }
  128.     }
  129.    
  130.    
  131. }
  132.  
  133.  
  134. /**
  135. * @brief Vérifie s'il y a des pertes de paquets
  136. * @param[in-out] Messagerie
  137. * @param[in-out] le flux de sortie log
  138. */
  139. void verif_perte(Messagerie& mes, ostream& os) {
  140.  
  141.     for (unsigned int i = 0; i < longueur(mes.listeMes); i++) {
  142.         if (lire(mes.listeMes, i).LgMes != lire(mes.listeMes, i).nbPRecus) {
  143.        
  144.             os << "Suppression de message ";
  145.             ecrire_id(os, lire(mes.listeMes, i).idMes);
  146.             os << '\n';
  147.             supprimer(mes.listeMes, i);
  148.            
  149.         }
  150.     }
  151.    
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement