Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * @file main.cpp
- * @brief fichier main du projet sp6
- * @author Samy Letombe, Nathan Pellissiere, Mohammed Senhadji
- * @version 1 20/12/17
- */
- #include <cassert>
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <sys/stat.h>
- using namespace std;
- #include "Messagerie.h"
- #include "Date.h"
- #include "Heure.h"
- #include "FileAPriorité.h"
- /**
- * @brief Initialise la messagerie
- * @param[in-out] Messagerie à initialiser
- */
- void initialiser(Messagerie& mes) {
- initialiser(mes.listeMes, 1, 1);
- }
- /**
- * @brief Détruit/désalloue la messagerie
- * @param[in-out] Messagerie à détruire
- */
- void detruire(Messagerie& mes) {
- for (unsigned int i = 0; i < longueur(mes.listeMes); i++) {
- detruire(lire(mes.listeMes, i).fileB);
- }
- detruire(mes.listeMes);
- }
- /**
- * @brief Traite le PaquetReseau dans la messagerie
- * @param[in-out] Messagerie
- * @param[in] PaquetReseau à traiter
- */
- void TraiterPaquetReseau(Messagerie& mes, const PaquetReseau& paqres, std::ostream& os, const unsigned int a) {
- unsigned int i = 0;
- MessageEnCours item;
- bool first;
- int pos = 0;
- bool correspondance = false;
- // permet de voir si le messages sont déjà dans une messagerie en cours
- while (i < longueur(mes.listeMes) && correspondance == false) {
- if (estEgal(lire(mes.listeMes, i).idMes, paqres.IdMes)) {
- correspondance = true;
- }
- else i++;
- }
- // si elle n'est pas dans une messagerie en cours, ça en crée une
- if (correspondance == false) {
- item.idMes = paqres.IdMes;
- item.LgMes = 0;
- item.nbPRecus = 0;
- initialiser(item.fileB, 10 );
- inserer(mes.listeMes, i, item);
- os << a << " Detection de nouveau message " << paqres.IdMes.exp << ' ' << paqres.IdMes.dest << ' ';
- ecrire_date(os, paqres.IdMes.date);
- os << ' ';
- ecrire_heure(os, paqres.IdMes.heure);
- os << ' ' << paqres.noPR << ' ' << paqres.finMess << endl;
- }
- // sinon ça la stock
- item= lire(mes.listeMes, i);
- entrer(item.fileB, paqres.blocD);
- item.nbPRecus++;
- item.LastPRecu = paqres.noPR;
- // Permet de detecter la fin de message
- if (paqres.finMess == 1) {
- os << a << " Detection de fin de message " << paqres.IdMes.exp << ' ' << paqres.IdMes.dest << ' ';
- ecrire_date(os, paqres.IdMes.date);
- os << ' ';
- ecrire_heure(os, paqres.IdMes.heure);
- os << ' ' << paqres.noPR << ' ' << paqres.finMess << endl;
- item.LgMes = paqres.blocD.noBloc;
- }
- ecrire(mes.listeMes, i, item);
- // Permet de faire l'archivage dans le log.txt et de crée un fichier mailbox*.txt
- if (item.nbPRecus == item.LgMes) {
- os << a << " Archivage mailbox " << item.idMes.dest << ' ';
- ecrire_date(os, mes.listeMes.c.tab->idMes.date);
- os << ' ';
- ecrire_heure(os, item.idMes.heure);
- os << endl;
- char test[20];
- sprintf_s(test, "Mailbox %s.txt", item.idMes.dest);
- ofstream ko(test, ios::ate | ios::app);
- /*
- Permet d'écrire dans les mailbox . txt
- */
- if (ko) {
- //Avoir la position du curseur
- pos = ko.tellp();
- //Si la messagerie vient d'être créé, la nommer
- if (pos == 0) ko << "Mailbox " << lire(mes.listeMes, i).idMes.dest << endl ;
- //écrire dans la mailbox le message reçu
- ecrire_mec(ko, lire(mes.listeMes, i));
- }
- }
- /*
- Permet de verifier les pertes de paquets
- */
- for (unsigned int j = 0; j < longueur(mes.listeMes); j++) {
- if (paqres.noPR >= lire(mes.listeMes, j).LastPRecu + 10) {
- os << paqres.noPR << " Perte de paquet, suppression de message ";
- ecrire_id(os, lire(mes.listeMes, j).idMes);
- os << '\n';
- supprimer(mes.listeMes, j);
- }
- }
- }
- /**
- * @brief Vérifie s'il y a des pertes de paquets
- * @param[in-out] Messagerie
- * @param[in-out] le flux de sortie log
- */
- void verif_perte(Messagerie& mes, ostream& os) {
- for (unsigned int i = 0; i < longueur(mes.listeMes); i++) {
- if (lire(mes.listeMes, i).LgMes != lire(mes.listeMes, i).nbPRecus) {
- os << "Suppression de message ";
- ecrire_id(os, lire(mes.listeMes, i).idMes);
- os << '\n';
- supprimer(mes.listeMes, i);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement