Nel mio programma che simula un servizio di posta elettronica sto scrivendo il codice per non consentire che un utente effettui un login se risulta già loggato.
Per fare questo ho pensato di far creare al server un array dove inserisce gli username degli utenti che man mano si loggano, in questo modo se si prova a fare un nuovo login con lo stesso nome utente si ha in risposta che l'utente è già loggato perché presente nell'array utentiLoggati. Tutto questo funziona.
Il problema nasce nel momento in cui un utente chiude il suo client.
Devo fare in modo che il suo nome venga rimosso dall'array utentiLoggati.
Ho pensato di risolvere impostando come titolo della console del client l'username di chi la sta usando, in tal modo controllando ciclicamente gli handle delle finestre aperte (il programma si usa in locale) riesco a vedere se il client è ancora aperto oppure è stato chiuso.
Il server legge l'array degli utenti loggati e per ogni posizione controlla se esiste una console aperta con il nome trovato come titolo, ma FindWindow ritorna sempre NULL, anche se una console con il nome che sta cercando è aperta.
codice:
for(i = 0; i < MAX_UTENTI; i++) {
if(FindWindow(NULL,utentiLoggati[i]) == NULL) {
printf("Utente controllato: %s\n",utentiLoggati[i]);
strcpy(utentiLoggati[i]," ");
i = MAX_UTENTI;
utentiOn--;
}
}
printf("Utente controllato: %s\n",utentiLoggati[i]);
riporta il nome contenuto nell'array ed è uguale a quello della console aperta, quindi FindWindow non dovrebbe ritornare NULL, ma un handle valido, perché non lo fa?