1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
/******************SET FIFO******************************************/ if(mkfifo(PATH_FIFO,0777)<0){ if(errno!=EEXIST){ perror("Erreur mkfifo"); exit(EXIT_FAILURE); }else{ perror("fifo already exists, but show must go on :p"); } } printf("jouvre la fifo qui se trouve %s\n", PATH_FIFO); if((fifo=open(PATH_FIFO,O_RDONLY))<0){ perror("Erreur open"); exit(EXIT_FAILURE); } printf("fifo ouverte en read\n"); /****************ON COMMENCE LA PARTIE ICI******************************/ jeux=0; joueurCourant=-1; joue=0; while(1){ int nbcar=0; if(jeux==0 && nombre_de->joueur==5){ printf("la partie débute\n"); jeux=1; } if(jeux==0 && nombre_de->joueur>=2 && nombre_de->joueur<5){ printf("Dans 30sec on démarre la partie si ya pas dautre inscription\n"); alarm(30); } if(jeux==1 && joue==0){ joueurCourant = (joueurCourant+1)%nombre_de->joueur; msgMQ->pid=tabPid[joueurCourant]; msgMQ->type = 'J'; joue=1; if(msgsnd(msgq_id,msgMQ,sizeof(struct msgMQ),IPC_NOWAIT)<0){ perror("Erreur msgsnd"); exit(EXIT_FAILURE); } printf("prochain joueur %d\n",tabPid[joueurCourant]); kill(tabPid[joueurCourant],SIGUSR1); }
/*c'est ici que ca foire **/
:mouarf:if((nbcar=read(fifo,sonMsg,sizeof(struct msgFifo))) <=0){
continue;
}
if(sonMsg->type=='I'){
if(nombre_de->joueur<6 && jeux==0){
printf("Oh on doit inscrire quelqu un\n");
printf("nom : %s, prenom : %s, pid %d\n",sonMsg->nom,sonMsg->prenom,sonMsg->pid);
strcpy(joueurs->tabJoueur[nombre_de->joueur].nom,sonMsg->nom);
strcpy(joueurs->tabJoueur[nombre_de->joueur].prenom,sonMsg->prenom);
tabPid[nombre_de->joueur]=sonMsg->pid;
printf("SERVER a inscrit : %s %s\n", joueurs->tabJoueur[nombre_de->joueur].nom, joueurs->tabJoueur[nombre_de->joueur].prenom);
nombre_de->joueur++;
msgMQ->pid = sonMsg->pid;
msgMQ->type = 'O';
msgMQ->numJoueur = nombre_de->joueur;
if(msgsnd(msgq_id,msgMQ,sizeof(struct msgMQ),IPC_NOWAIT)<0){
perror("Erreur msgsnd");
exit(EXIT_FAILURE);
}
kill(sonMsg->pid,SIGUSR1);
}else{
msgMQ->pid = sonMsg->pid;
msgMQ->type = 'K';
if(msgsnd(msgq_id,msgMQ,sizeof(struct msgMQ),IPC_NOWAIT)<0){
perror("Erreur msgsnd");
exit(EXIT_FAILURE);
}
kill(sonMsg->pid,SIGUSR1);
}
}
if(sonMsg->type=='P'){
printf("Oh c'est une proposition\n");
}
printf("il y a %d joueur\n",nombre_de->joueur);
}
printf("SERVER CLOSING\n");
if(close(fifo)<0){
perror("Erreur close");
exit(EXIT_FAILURE);
}
shmdt(repartition);
shmdt(nombre_de);
shmdt(joueurs);
delmem(shm_id_nbr_nbj);
delmem(shm_id_repart);
delmem(shm_id_joueur);
exit(0);
} |
Partager