void MainWindow::on_finRecherche() { if(recherche[0]==NULL && recherche[1]==NULL && recherche[2]==NULL && recherche[3]==NULL) { for(int x=0;x<fichiersSource.length();x++) fichiersSource[x].remove(source); for(int x=0;x<dossiersSource.length();x++) dossiersSource[x].remove(source); for(int x=0;x<fichiersDestination.length();x++) fichiersDestination[x].remove(destination); for(int x=0;x<dossiersDestination.length();x++) dossiersDestination[x].remove(destination); ui->progressBar->setMaximum(100); ui->progressBar->setValue(0); ui->label_Wait->hide(); switch (mode) { case CONTRIBUTION: analyserContribution(); break; case SYNCRONISATION: analyserSyncronisation(); break; case ECHO: analyserEcho(); break; default: break; } ui->pushButton_Lancer->setEnabled(!(!fichiersVersDestination.length() && !dossiersVersDestination.length() && !fichiersVersSource.length() && !dossiersVersSource.length() && !fichiersSupprDestination.length() && !dossiersSupprDestination.length())); changerMode(mode); } }
void MainWindow::analyser() { QPushButton *temp=(QPushButton*)sender(); if(temp==ui->pushButton_Contri) changerMode(CONTRIBUTION); if(temp==ui->pushButton_Sync) changerMode(SYNCRONISATION); if(temp==ui->pushButton_Echo) changerMode(ECHO); if(mode != AUCUN) { //Reset listes resetListes(); fichiersSource.clear(); fichiersDestination.clear(); dossiersSource.clear(); dossiersDestination.clear(); changerMode(false); ui->label_Wait->setText("Veuillez patienter..."); ui->label_Wait->show(); ui->progressBar->setMaximum(0); recherche[0]=new ThreadDirIterator(source,filtre,FICHIER,true); connect(recherche[0],SIGNAL(finRecherche(QStringList)),this,SLOT(on_finFichiersSource(QStringList))); recherche[1]=new ThreadDirIterator(source,filtre,DOSSIER,true); connect(recherche[1],SIGNAL(finRecherche(QStringList)),this,SLOT(on_finDossiersSource(QStringList))); recherche[2]=new ThreadDirIterator(destination,filtre,FICHIER,true); connect(recherche[2],SIGNAL(finRecherche(QStringList)),this,SLOT(on_finFichiersDestination(QStringList))); recherche[3]=new ThreadDirIterator(destination,filtre,DOSSIER,true); connect(recherche[3],SIGNAL(finRecherche(QStringList)),this,SLOT(on_finDossiersDestination(QStringList))); for(int x=0;x<4;x++) { connect(recherche[x],SIGNAL(finished()),this,SLOT(on_finRecherche())); recherche[x]->start(); } } }
void MainWindow::on_pushButton_Lancer_clicked() { ui->label_fichierEnCours->show(); ui->label_Wait->show(); ui->pushButton_Lancer->setEnabled(false); ui->pushButton_Source->setEnabled(false); ui->pushButton_Destination->setEnabled(false); changerMode(false); ui->pushButton_Quitter->setEnabled(false); ui->progressBar->setMaximum(fichiersSupprDestination.length()+dossiersSupprDestination.length()+dossiersVersSource.length()+dossiersVersDestination.length()+fichiersVersSource.length()+fichiersVersDestination.length()); QDir doss; //Suppression fichiers destination if(!fichiersSupprDestination.isEmpty()){ for(int x=0;x<fichiersSupprDestination.length();x++){ ui->progressBar->setValue(ui->progressBar->value()+1); doss.remove(destination+fichiersSupprDestination[x]); } } //Suppression dossiers destination if(!dossiersSupprDestination.isEmpty()){ for(int x=0;x<dossiersSupprDestination.length();x++){ ui->progressBar->setValue(ui->progressBar->value()+1); doss.rmdir(destination+dossiersSupprDestination[x]); } } //Création dossiers vers source if(!dossiersVersSource.isEmpty()){ for(int x=0;x<dossiersVersSource.length();x++){ ui->progressBar->setValue(ui->progressBar->value()+1); doss.mkdir(source+dossiersVersSource[x]); } } //Création dossiers vers destination if(!dossiersVersDestination.isEmpty()){ for(int x=0;x<dossiersVersDestination.length();x++){ ui->progressBar->setValue(ui->progressBar->value()+1); doss.mkdir(destination+dossiersVersDestination[x]); } } on_finCopieSource(); }
void MainWindow::changerMode(Mode val) { mode=val; changerMode(true); switch (val) { case ECHO: ui->pushButton_Echo->setEnabled(false); break; case CONTRIBUTION: ui->pushButton_Contri->setEnabled(false); break; case SYNCRONISATION: ui->pushButton_Sync->setEnabled(false); break; default: break; } }
void MainWindow::on_finCopieDestination() { if(copie!=NULL) delete copie; if(!fichiersVersDestination.isEmpty()){ ui->progressBar->setValue(ui->progressBar->value()+1); ui->label_fichierEnCours->setText(destination+fichiersVersDestination.first()); copie=new ThreadCopie(source+fichiersVersDestination.first(),destination+fichiersVersDestination.first()); connect(copie,SIGNAL(finished()),this,SLOT(on_finCopieDestination())); copie->start(); fichiersVersDestination.removeFirst(); }else{ ui->pushButton_Source->setEnabled(true); ui->pushButton_Destination->setEnabled(true); changerMode(mode); ui->pushButton_Quitter->setEnabled(true); ui->label_fichierEnCours->hide(); resetListes(); } }
int main(int argc, char *argv[]) { char requete[100]; /* requete que l'on va envoyer au serveur */ int etatConnexion; /* 1 : connecte / 0 : non connecte */ int choix; /* Choix pour le menu principal */ char nomFichier[100]; /* Nom du fichier */ int c; /* permet de vider le buffer */ int termine; /* permet de savoir si un client a termine ses traitements */ int choixModeTransfert; /* Mode de transfert du fichier, 0 = bloc / 1 = flux */ etatConnexion = 0; choixModeTransfert = 1; /* Mode flux par defaut */ /* On initialise le client */ if(InitialisationAvecService(argv[1],argv[2]) == 0){ /* Erreur sur l'initialisation, message d'erreur affiche par la fonction */ return -1; } /* On se connecte directement sur le serveur */ etatConnexion = connecterUtilisateur(); /* On verifie que l'utilisateur est bien connecte sur le serveur */ if(etatConnexion == 1){ /* On va maintenant afficher le menu principal de l'application */ do{ termine = FALSE; /* Menu principal */ printf("-MENU PRINCIPAL-\n\n"); printf("1 : Envoyer un fichier sur le serveur\n"); printf("2 : Telecharger un fichier stocke sur le serveur\n"); printf("3 : Modifier le mode de telechargement des fichiers (bloc / flux)\n"); printf("4 : Reprendre un telechargement en cours (suite a une erreur)\n"); printf("0 : Se deconnecter\n\n"); printf("Votre choix : "); /* On recupere le choix de l'utilisateur */ if(scanf("%d",&choix) < 1){ /* Erreur saisie */ printf("ERREUR : votre saisie est incorrecte \n\n"); while ( ((c = getchar()) != '\n') && c != EOF); /* on vide le buffer */ }else{ while ( ((c = getchar()) != '\n') && c != EOF); /* on vide le buffer */ /* On regarde le choix de l'utilisateur */ switch (choix){ case 1: /* Envoyer un fichier */ printf("Saisir le nom du fichier que vous voulez envoyer (le fichier doit se trouver dans le repertoire actuel et le nom doit faire 100 caracteres max) : \n"); /* On va lire le nom du fichier au clavier */ fgets(nomFichier,100,stdin); fflush(stdin); /* on vide le buffer */ /* On verifie que on a bien lu quelque chose */ if(nomFichier != NULL){ /* On lance la procedure d'envoi */ envoyerFichier(nomFichier); } break; case 2: /* Telecharger un fichier */ printf("Saisir le nom du fichier que vous voulez telecharger : \n"); /* On va lire le nom du fichier au clavier */ fgets(nomFichier,100,stdin); fflush(stdin); /* on vide le buffer */ /* On verifie qu'on a bien lu quelque chose */ if(nomFichier != NULL){ /* En fonction du mode on appelle la fonction qui correspond */ if(choixModeTransfert == 0){ /* On regarde si le client est lance avec plusieurs serveurs <=> nb arguments > 2 */ if(argc > 3){ /* on va pouvoir faire du telechargement parallele */ pthread_t tabThread[argc-2]; /* Tableau de thread de longueur = au nombre de serveurs */ int i; /* indice de parcours du tableau */ /* On boucle pour creer les threads */ for(i=0;i<argc-2;i++){ donneesThread *donnees = malloc(sizeof(donneesThread)); strcpy(donnees->numPort,argv[i+2]); strcpy(donnees->nomFichier,nomFichier); donnees->numeroServeur = i+1; donnees->nombreServeurs = argc-2; pthread_create(&tabThread[i], NULL, telechargerFichierBlocThread,(void *) donnees); } /* On boucle pour mettre le programme en attente */ for(i=0;i<argc-2;i++){ pthread_join(tabThread[i], NULL); } }else{ /* On telecharge normal depuis un seul serveur */ telechargerFichierBloc(nomFichier); } }else{ /* On lance la procedure d'envoi */ telechargerFichier(nomFichier); } } break; case 3: /* Modification du mode de transfert */ do{ printf("Quel mode de transfert voulez-vous choisir :\n"); printf("1 : Mode bloc\n"); printf("2 : Mode flux\n"); printf("0 : Retour\n"); printf("Votre choix : "); if(scanf("%d",&choixModeTransfert) < 1){ /* Erreur saisie */ printf("ERREUR : votre saisie est incorrecte \n\n"); while ( ((c = getchar()) != '\n') && c != EOF); /* on vide le buffer */ }else{ while ( ((c = getchar()) != '\n') && c != EOF); /* On teste que l'utiliateur est bien saisi 1 ou 2 ou 0 */ switch (choixModeTransfert){ case 1: /* Passage en mode bloc */ changerMode('B'); choixModeTransfert = 0; break; case 2: /* Passage en mode flux */ changerMode('S'); choixModeTransfert = 1; break; default: /* Erreur saisie */ printf("Votre choix est incorrect\n"); } } }while(choixModeTransfert != 0 && choixModeTransfert != 1); break; case 4: printf("Saisir le nom du fichier que vous voulez reprendre : \n"); /* On va lire le nom du fichier au clavier */ fgets(nomFichier,100,stdin); fflush(stdin); /* on vide le buffer */ /* On verifie qu'on a bien lu quelque chose */ if(nomFichier != NULL){ /* On passe en mode bloc */ choixModeTransfert = 0; /* On reprend le transfert */ repriseTelechargement(nomFichier); } break; case 0: /* Quitter l'application */ Emission("QUIT\n"); printf("%s",Reception()); Terminaison(); termine = TRUE; break; default: /* Erreur saisie */ printf("ERREUR : votre saisie est incorrecte \n\n"); break; } } }while(termine != TRUE); /* On ferme l'application */ printf("Fin du programme, au revoir\n"); } return 0; }