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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
void connexion(Client *cl)
{
rechercheFichier(cl); //demande de pseudo + vérification si présent dans fichier
strcpy(attente,"Attente d'un adversaire...");
char attente[35];
//client "cl" dispo pour une partie
//attente d'un adversaire s'il n'y en a pas ? donc sauvegarde de cl ?
//mais la thread qui correspond a cl va continuer... retourne au menu ci-dessous ??!!
//
//?????
}
void menuIdentification(Client *cl) //METTRE MENU DANS UNE STRUCTURE ET N'ENVOYER QU'UNE STRUCTURE AU CLIENT
{
int cont=0;
strcpy(titre,"Identification : ");
strcpy(choix1,"1) s'enregistrer : ");
strcpy(choix2,"2) se connecter: ");
strcpy(quit,"9) quitter : ");
strcpy(proposition,"votre choix ? ");
strcpy(ko,"choix incorrect, recommencez !!");
strcpy(ok,"");
while (true)
{
if (clientBanni==1){break;}
if ( send(cl->NewSocket,(char*)&titre,20*sizeof(char),0) == SOCKET_ERROR ){WSAErreur("send",GetLastError()); getch(); exit(0);}
if ( send(cl->NewSocket,(char*)&choix1,35*sizeof(char),0) == SOCKET_ERROR ){WSAErreur("send",GetLastError()); getch(); exit(0);}
if ( send(cl->NewSocket,(char*)&choix2,35*sizeof(char),0) == SOCKET_ERROR ){WSAErreur("send",GetLastError()); getch(); exit(0);}
if ( send(cl->NewSocket,(char*)&quit,20*sizeof(char),0) == SOCKET_ERROR ){WSAErreur("send",GetLastError()); getch(); exit(0);}
if ( send(cl->NewSocket,(char*)&proposition,35*sizeof(char),0) == SOCKET_ERROR ){WSAErreur("send",GetLastError()); getch(); exit(0);}
if ( recv(cl->NewSocket,(char*)&choix,sizeof(int),0) == SOCKET_ERROR ){WSAErreur("recv",GetLastError()); getch(); exit(0);}
//je renvoie le choix au client pour qu'il lance la fonction correspondante
if ( send(cl->NewSocket,(char*)&choix,sizeof(int),0) == SOCKET_ERROR ){WSAErreur("send",GetLastError()); getch(); exit(0);}
if (choix == 9) {break;}
else if (choix < 1 && choix > 2)
{
if ( send(cl->NewSocket,(char*)&ko,35*sizeof(char),0) == SOCKET_ERROR ){WSAErreur("send",GetLastError()); getch(); exit(0);}
cont=0;
}
else
{
if ( send(cl->NewSocket,(char*)&ok,35*sizeof(char),0) == SOCKET_ERROR ){WSAErreur("send",GetLastError()); getch(); exit(0);}
if (choix == 1) {ecrireLoginPWD(cl);}
else {connexion(cl);}
}
}
}
void ThreadClient(LPVOID pParam) //thread qui s'occupe du client
{
DWORD psConn=*(DWORD*)pParam;
STRUCTCONN sConn = *(STRUCTCONN*)psConn;
SOCKET NewSocket=sConn.NewSocket;
HANDLE hEvtThdStart=sConn.hEvtThdStart;
HANDLE hEvtThdEnd=sConn.hEvtThdEnd;
//initialisation de cl de type Client, qui va contenir le socket, l'ip et le pseudo
Client cl;
cl.NewSocket=NewSocket;
cl.numThread=sConn.IdConn;
strcpy(cl.ip,inet_ntoa(sincl.sin_addr));
printf("\nVoici l'ip du client : %s",cl.ip);
//WaitForSingleObject(hEvtThdStart,INFINITE);
uFlagBlock=0;
if ( ioctlsocket(NewSocket,FIONBIO,&uFlagBlock) == SOCKET_ERROR ){ WSAErreur("ioctlsocket",GetLastError()); encore=false; }
clientBanni=0;
ouvertureFichierUsers();
menuIdentification(&cl); //menu avec le choix de s'enregister ou de se connecter ou de quitter
printf ("\nSession du client termine !\n\n");
//j'écris dans le fichier log que le client vient de terminer sa session
char log[250];
sprintf(log,"Session du client termine : IP = %s",cl.ip);
ecrireLog(log);
ouvertureFichierDataUsers();
sauverDataUsers();
//fermeture
SetEvent(hEvtThdEnd);
} |
Partager