Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/elvnct/AlloHouston
Browse files Browse the repository at this point in the history
  • Loading branch information
williamgraver committed Dec 8, 2017
2 parents 67205a7 + b6407bf commit 4c3ed8d
Show file tree
Hide file tree
Showing 12 changed files with 44 additions and 86 deletions.
2 changes: 1 addition & 1 deletion client/headers/color.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#ifndef COLOR_H
#define COLOR_H

// DEFINE POUR UTILISER LA COULEUR DANS LA CONSOLE
#define RED "\x1B[31m"
#define GRN "\x1B[32m"
#define YEL "\x1B[33m"
Expand Down
1 change: 1 addition & 0 deletions client/headers/main.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ int creationClient(char* adresse, int numeroPort);
char* getHostName(char* host_name);
void lectureEntreeClient(int descripteurSocketClient, char * messageAEnvoyer);
void receptionMessageServeur(int descripteurSocketClient,char *commandeRecu);

#endif
3 changes: 0 additions & 3 deletions client/sources/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,6 @@ int creationClient(char* adresse, int numeroPort)
{
printf("socket fonctionne\n");

// int connect(int descripteur, const struct sockaddr *p, int len);
if(connect(descripteur,(struct sockaddr *) &socketService,sizeof(socketService)) == 0)
{
printf("Connexion sur %s:%d\n", inet_ntoa(socketService.sin_addr), htons(socketService.sin_port));
Expand All @@ -145,13 +144,11 @@ int creationClient(char* adresse, int numeroPort)

void lectureEntreeClient(int descripteurSocketClient, char * messageAEnvoyer)
{
//char messageAEnvoyer[SIZE_MSG];
int resultWrite;
fgets(messageAEnvoyer, SIZE_MSG, stdin);
strtok(messageAEnvoyer, "\n");
printf("Message envoye : %s \n",messageAEnvoyer );
resultWrite = write(descripteurSocketClient, messageAEnvoyer, SIZE_MSG);
//return messageAEnvoyer;
}

void receptionMessageServeur(int descripteurSocketClient, char *commandeRecu){
Expand Down
2 changes: 1 addition & 1 deletion serveur/headers/color.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#ifndef COLOR_H
#define COLOR_H

// DEFINE POUR UTILISER LA COULEUR DANS LA CONSOLE
#define RED "\x1B[31m"
#define GRN "\x1B[32m"
#define YEL "\x1B[33m"
Expand Down
1 change: 1 addition & 0 deletions serveur/headers/main.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@

int creationServeur(int numeroPort);
void ecouteServeur(int descripteur);

#endif
2 changes: 2 additions & 0 deletions serveur/headers/requetes.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
#ifndef REQUETES_H
#define REQUETES_H
#include "../headers/train.h"

int trouverTrainLePlusProche(struct Train* listeTrain, int compteLigne, char * villeDepart, char * villeArrivee, int heureDepart, int minuteDepart, char * commandeAEnvoyer);
int trouverTrainParTranche(struct Train* listeTrain, int * compteLigne , char * villeDepart, char * villeArrivee, int heureDepartDebut, int minuteDepartDebut, int heureDepartFin, int minuteDepartFin, char * commandeAEnvoyer);
Train * listeTrainParVille(struct Train * listeTrain, int * compteLigne, char * villeDepart, char * villeArrivee, char * commandeAEnvoyer);
int trajetSelonCritere(struct Train * listeTrain, int compteLigne, int critere, char * commandeAEnvoyer);
int tempsVersInt(struct Temps * temp);

#endif
1 change: 1 addition & 0 deletions serveur/headers/service.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ void recevoirMessage(int descripteurSocketService, char *commandeRecu);
void envoyerMessage(int descripteurSocketService, char *commandeAEnvoyer);
void choixHoraire(int descripteurSocketService, char *commandeRecu, char *commandeAEnvoyer, int *h, int *m, int pid);
void demanderVille(int descripteurSocketService, char *commandeRecu, char *commandeAEnvoyer, char **villeDepart, char **villeArrivee, int pid, int nbTrain,char **listeVilleDepart, char **listeVilleArrive);

#endif
5 changes: 2 additions & 3 deletions serveur/headers/testStructure.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
#ifndef TESTSTRUCTURE_H
#define TESTSTRUCTURE_H

Train * trouverTrainLePlusProche(struct Train** listeTrain, int tailleListe, char * villeDepart, char * villeArrivee, int heureDepart, int minuteDepart);
Train * listeTrainParVille(struct Train* listeTrain, int* compteLigne, char * villeDepart, char * villeArrivee);
int tempsVersInt(struct Temps* temp);
/*Train ** trouverTrainParTranche(struct Train** listeTrain, int* tailleListe , char * villeDepart, char * villeArrivee, int heureDepartDebut, int minuteDepartDebut, int heureDepartFin, int minuteDepartFin);
Train ** fonctionTri(struct Train** trains, int nbTrains);
int charVersInt(char* heure);*/

#endif
30 changes: 12 additions & 18 deletions serveur/sources/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ int main(int argc, char *argv[])
// On a bien 1 argument qui doit etre le numero de PORT

ecouteServeur(creationServeur(atoi(argv[1])));
}else
}
else
{
fprintf(stderr, RED "ALLO HOUSTON : Il doit y avoir 1 argument : "MAG"PORT "RESET "\n");
exit(-1);
Expand All @@ -45,14 +46,12 @@ int creationServeur(int numeroPort)

//Attachement de la socket (Primitive "bind")

// int bind(int descripteur, const struct sockaddr *p, int len);
if(descripteur>=3)
{
printf("socket fonctionne\n");
if(bind(descripteur,(struct sockaddr *) &socketEcoute,sizeof(socketEcoute)) == 0)
{
// Bind works
// int listen(int descripteur, int nb);
// Bind marche
printf("bind fonctionne\n");

if(listen(descripteur, 100) == 0)
Expand All @@ -70,7 +69,7 @@ int creationServeur(int numeroPort)
}
else
{
//Bind don't works
//Bind ne marche pas
fprintf(stderr, RED "ALLO HOUSTON : Erreur lors du listen" RESET "\n");
fprintf(stderr, "Peut etre que le port "YEL "%d" RESET " est deja utilise?\n", numeroPort);
exit(-1);
Expand All @@ -88,14 +87,9 @@ void ecouteServeur(int descripteur)
{

struct sockaddr_in socketService;
// TODO Peut etre besoin de ça ?
// socketService.sin_family = AF_INET;
// socketService.sin_port = htons(numeroPort);
// (socketService.sin_addr).s_addr = htonl(INADDR_ANY);

while(1)
{
//int accept(int descripteur, struct sockaddr *p, int *len);
//Attente d'acceptation client
printf("En attente de connexion...\n");
unsigned int tailleSocketService = sizeof(struct sockaddr_in);
Expand All @@ -106,19 +100,19 @@ void ecouteServeur(int descripteur)
printf("accept fonctionne\n");
switch (fork()) {
case -1:
// Erreur dans la création d'un FILS
fprintf(stderr, RED "ALLO HOUSTON : Erreur dans la création d'un fils" RESET "\n");
exit(-1);
// Erreur dans la création d'un FILS
fprintf(stderr, RED "ALLO HOUSTON : Erreur dans la création d'un fils" RESET "\n");
exit(-1);

case 0:
// FILS
printf("Création du fils ayant pour numero de PID : %d\n",getpid());
nouveauService(descripteurSocketService);
// TODO intercepter la mort du fils
break;
printf("Création du fils ayant pour numero de PID : %d\n",getpid());
nouveauService(descripteurSocketService);
break;

default:
// PERE
printf("Pere se remet en écoute : %d\n",getpid() );
printf("Pere se remet en écoute : %d\n",getpid() );
}
}
else
Expand Down
69 changes: 17 additions & 52 deletions serveur/sources/service.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ void nouveauService(int descripteurSocketService)
listeTrain = trainFromFile(nomFichier, &nbTrain); // Récupération de la liste de train
char *listeVilleDepart[nbTrain];
char *listeVilleArrive[nbTrain];
for(int iterateurTrain = 0; iterateurTrain<nbTrain; iterateurTrain++){
for(int iterateurTrain = 0; iterateurTrain < nbTrain; iterateurTrain++){
listeVilleDepart[iterateurTrain] = (listeTrain + iterateurTrain)->villeDepart;
strToUpper(listeVilleDepart[iterateurTrain]);
listeVilleArrive[iterateurTrain] = (listeTrain + iterateurTrain)->villeArrivee;
Expand Down Expand Up @@ -116,22 +116,11 @@ void nouveauService(int descripteurSocketService)
case 2:
//Fonction 2 : ville de départ + ville d'arrivée + tranche horaire pour le départ
// Envoie et reception des informations a propos de la ville de depart
printf("%d "MAG"CHOIX DEPART"RESET"\n", pid);
strcpy(commandeAEnvoyer, "\nVeuillez entrer la ville de de depart : ");
envoyerMessage(descripteurSocketService, commandeAEnvoyer);
recevoirMessage(descripteurSocketService, commandeRecu);
char * villeDepartRequete2 = strdup(commandeRecu);
printf("Le client veut partir de : %s\n", villeDepartRequete2);
// Envoie et reception des informations a propos de la ville d'arrivee
printf("%d "MAG"CHOIX ARRIVEE"RESET"\n", pid);
strcpy(commandeAEnvoyer, "\nVeuillez entrer la ville d'arrivee : ");
envoyerMessage(descripteurSocketService, commandeAEnvoyer);
recevoirMessage(descripteurSocketService, commandeRecu);
char * villeArriveeRequete2 = strdup(commandeRecu);
printf("Le client veut aller a : %s\n", villeArriveeRequete2);
demanderVille(descripteurSocketService, commandeRecu, commandeAEnvoyer, &villeDepart,&villeArrivee, pid, nbTrain, listeVilleDepart, listeVilleArrive);



if(strcmp(villeArriveeRequete2, villeDepartRequete2) == 0)
if(strcmp(villeDepart, villeArrivee) == 0)
{
printf("%d "RED"MAUVAIS ENTREE UTILISATEUR "MAG"VILLES IDENTIQUES"RESET"\n", pid);
envoyerMessage(descripteurSocketService, "noread;"RED"Les villes sont identiques."RESET"\n");
Expand All @@ -151,9 +140,9 @@ void nouveauService(int descripteurSocketService)

int compteLigneRequete2;
compteLigneRequete2 = nbTrain;
strToUpper(villeDepartRequete2);
strToUpper(villeArriveeRequete2);
trouverTrainParTranche(listeTrain, &compteLigneRequete2, villeDepartRequete2, villeArriveeRequete2, h, m, h2, m2, commandeAEnvoyer);
strToUpper(villeDepart);
strToUpper(villeArrivee);
trouverTrainParTranche(listeTrain, &compteLigneRequete2, villeDepart, villeArrivee, h, m, h2, m2, commandeAEnvoyer);

printf("\n");
envoyerMessage(descripteurSocketService, commandeAEnvoyer);
Expand All @@ -166,54 +155,28 @@ void nouveauService(int descripteurSocketService)
exit(0);
}


//printf("\n");
//envoyerMessage(descripteurSocketService, commandeAEnvoyer);
envoyerMessage(descripteurSocketService, "Voulez vous retourner au menu ou quitter?\n 1 : Retourner au menu\n 2 : Quitter\n Choix : ");
recevoirMessage(descripteurSocketService, commandeRecu);
if(atoi(commandeRecu)==2)
{
envoyerMessage(descripteurSocketService,"stop");
close(descripteurSocketService);
exit(0);
}


break;
case 3:
//Fonction 3 : Ville de départ + arrivée = renvoi une liste
// Envoie et reception des informations a propos de la ville de depart
printf("%d "MAG"CHOIX DEPART"RESET"\n", pid);
strcpy(commandeAEnvoyer, "\nVeuillez entrer la ville de de depart : ");
envoyerMessage(descripteurSocketService, commandeAEnvoyer);
recevoirMessage(descripteurSocketService, commandeRecu);
printf("Le client veut partir de : %s (taille = %d)\n", commandeRecu, sizeRead);
char * villeDepartRequete3 = strdup(commandeRecu);
// Envoie et reception des informations a propos de la ville d'arrivee
printf("%d "MAG"CHOIX ARRIVEE"RESET"\n", pid);
strcpy(commandeAEnvoyer, "\nVeuillez entrer la ville d'arrivee : ");
envoyerMessage(descripteurSocketService, commandeAEnvoyer);
recevoirMessage(descripteurSocketService, commandeRecu);
printf("Le client veut aller a : %s (taille = %d)\n", commandeRecu, sizeRead);
char * villeArriveeRequete3 = strdup(commandeRecu);

//Fonction 3 : Ville de départ + arrivée = renvoi une liste
// Envoie et reception des informations a propos de la ville de depart
demanderVille(descripteurSocketService, commandeRecu, commandeAEnvoyer, &villeDepart,&villeArrivee, pid, nbTrain, listeVilleDepart, listeVilleArrive);

if(strcmp(villeArriveeRequete3, villeDepartRequete3) == 0)
if(strcmp(villeArrivee, villeDepart) == 0)
{
printf("%d "RED"MAUVAIS ENTREE UTILISATEUR "MAG"VILLES IDENTIQUES"RESET"\n", pid);
envoyerMessage(descripteurSocketService, "noread;"RED"Les villes sont identiques."RESET"\n");
break;
}

// Affichage de la liste de tous les trains satisfaisant les critères ville de départ et ville d'arrivée
strToUpper(villeDepartRequete3);
strToUpper(villeArriveeRequete3);
strToUpper(villeDepart);
strToUpper(villeArrivee);
int compteLigneRequete3;
compteLigneRequete3 = nbTrain;

fprintf(stderr,"Compte LIGNE :%d\n", compteLigneRequete3);
Train * lstTrainParVille = malloc(sizeof(Train));
lstTrainParVille = listeTrainParVille(listeTrain, &compteLigneRequete3, villeDepartRequete3, villeArriveeRequete3, commandeAEnvoyer);
lstTrainParVille = listeTrainParVille(listeTrain, &compteLigneRequete3, villeDepart, villeArrivee, commandeAEnvoyer);
//fprintf(stderr, "TEEEST : %s\n", commandeAEnvoyer);
//envoyerMessage(descripteurSocketService, commandeAEnvoyer);

Expand Down Expand Up @@ -393,6 +356,7 @@ void demanderVille(int descripteurSocketService, char *commandeRecu, char *comma
int existe = 0;
for(i=0; i<nbTrain;i++)
{
printf("%s\n", listeVilleDepart[i]);
if(strcmp(*villeDepart, listeVilleDepart[i])==0)
{
existe = 1;
Expand Down Expand Up @@ -423,7 +387,8 @@ void demanderVille(int descripteurSocketService, char *commandeRecu, char *comma
int existe = 0;
for(i=0; i<nbTrain;i++)
{
if(strcmp(*villeArrivee, listeVilleDepart[i])==0)
printf("%s\n", listeVilleArrive[i]);
if(strcmp(*villeArrivee, listeVilleArrive[i])==0)
{
existe = 1;
arrivee = 1;
Expand Down
4 changes: 2 additions & 2 deletions serveur/sources/temps.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Temps* tempsFromCSV(char* csv){

struct Temps* temps = malloc(sizeof(Temps));
char *token, *str, *tofree;
tofree = str = strdup(csv); // We own str's memory now.
tofree = str = strdup(csv); // copie de csv en local
// heure
token = strsep(&str, ":");
temps->heure = atoi(token);
Expand All @@ -32,6 +32,6 @@ Temps* tempsFromCSV(char* csv){
token = strsep(&str, ":");
temps->minute = atoi(token);

free(tofree); // We free the str we made
free(tofree); // On libére le tofree malloc
return temps;
}
10 changes: 4 additions & 6 deletions serveur/sources/train.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
* @fn void printfrintTrain(Train* train)
* @brief Affiche les informations d'un train
* @param train Le pointeur train pour lequel on souhaite afficher les informations.
* @TODO ajuster l'affichage de la réduc.
*/
void printTrain(Train* train)
{
Expand Down Expand Up @@ -111,26 +110,25 @@ Train * trainFromFile(char* nomFichier, int* nbTrain){
int compteLigne = 0;
if (fichier != NULL)
{
char ligne [ 256 ]; /* or other suitable maximum ligne size */
char ligne [ 256 ];
int lineCount = 0;
while (fgets(ligne, sizeof ligne, fichier) != NULL) /* read a ligne */
while (fgets(ligne, sizeof ligne, fichier) != NULL) /* lit une ligne */
{
compteLigne ++;
}
printf("%d ligne dans le fichier Trains.txt\n", compteLigne);
rewind(fichier);
listeToutTrain = malloc(compteLigne * sizeof(Train));
while (fgets ( ligne, sizeof ligne, fichier ) != NULL) /* read a ligne */
while (fgets ( ligne, sizeof ligne, fichier ) != NULL) /* lit une ligne */
{
*(listeToutTrain + lineCount) = *trainFromCSV(ligne);
//printTrain((listeToutTrain + lineCount));
lineCount ++;
}
fclose (fichier);
}
else
{
perror ( nomFichier ); /* why didn't the fichier open? */
perror ( nomFichier ); /* Pourquoi le fichier ne s'est pas ouvert ? */
}
*nbTrain = compteLigne;
return listeToutTrain;
Expand Down

0 comments on commit 4c3ed8d

Please sign in to comment.