/* Server.c */
#include "macro.h"
#include "manutenzione.h"
#include "startServer.h"
#include "funzioniServer.h"
void stampaMenu(){
/* Stampo il menù principale del server (in formato colorato) */
printf("\033[01;34m---------------------------------\n");fflush
(stdout
);
printf("-----------\033[00;34mMENU SERVER\033[01;34m-----------\n");fflush
(stdout
);
printf("---------------------------------\033[00m\n\n");fflush
(stdout
);
printf("\033[01;33m 1. Manutenzione\033[00m\n");fflush
(stdout
);
printf("\033[00;33m 2. Avvia server\033[00m\n");fflush
(stdout
);
printf(" 3. ESCI\n");fflush
(stdout
);
printf("\n\033[01;34m---------------------------------\n");fflush
(stdout
);
printf("---------------------------------");fflush
(stdout
);
printf("\n---------------------------------\033[00m\n");fflush
(stdout
);
}
int modalita(){
int modalita;
int testscanf;
/* Stampo il menù principale del server */
stampaMenu();
printf("\033[01;32mSelezionare l'opzione...\033[00m\n");fflush
(stdout
);
/* Seleziono l'opzione desiderata scartando quelle "illegali" */
do{
testscanf = scanf("%d", &modalita);
while(-1 == testscanf){
if(errno != EINTR){
chiusuraServer();
}
else{
testscanf = scanf("%d", &modalita);
}
}
if(testscanf == 0 || modalita>3 || modalita<1){ // Ho scelto un'opzione "illegale"
while(scanf("%*[^\n]") == -1){ // Svuoto l'input buffer
if(errno != EINTR){
chiusuraServer();
}
}
printf("Opzione non valida...\n");fflush
(stdout
);
printf("Selezionare l'opzione...\n\n");fflush
(stdout
);
stampaMenu();
}
} while(testscanf == 0 || modalita>3 || modalita<1);
/* Ritorno il valore dell'opzione selezionata*/
return modalita;
}
void inizializzazione(){
printf("\nInizializzazione server in corso...\n\n");fflush
(stdout
);
/* Testo l'apertura del file ElencoTelefonico.txt in lettura */
if(( ElencoTelefonico = fopen("ElencoTelefonico.txt", "r")) == NULL){
printf("Non è possibile aprire l'elenco telefonico, verificare la consistenza dell'archivio\n\n");fflush
(stdout
);
chiusuraServer();
}
else{
printf("Apertura elenco telefonico avvenuta con successo...\n");fflush
(stdout
);
}
while(fclose(ElencoTelefonico) != 0){
if(errno != EINTR){
chiusuraServer();
}
}
/* Testo l'apertura del file Permessi.txt in lettura */
if(( Permessi = fopen("Permessi.txt", "r")) == NULL){
printf("Non è possibile aprire l'elenco utenti, verificare la consistenza dell'archivio\n\n");fflush
(stdout
);
chiusuraServer();
}
else{
printf("Apertura elenco utenti avvenuta con successo...\n\n");fflush
(stdout
);
}
while(fclose(Permessi) != 0){
if(errno != EINTR){
chiusuraServer();
}
}
}
int main(int argc, char** argv){
if(argc != 3){
printf("\033[01;31m\nERRORE - Avviare il programma usando il comando: \033[00m%s [Indirizzo IP] [Porta]", argv
[0
]);fflush
(stdout
);
chiusuraServer();
}
else{
/* Imposto la gestione dei segnali asincroni */
signal(SIGINT, chiusuraServer);
signal(SIGQUIT, chiusuraServer);
signal(SIGILL, chiusuraServer);
signal(SIGSEGV, chiusuraServer);
signal(SIGTERM, chiusuraServer);
/* Ignoro il segnale SIGPIPE */
signal(SIGPIPE, SIG_IGN);
/* Eseguo il test degli archivi */
inizializzazione();
int opzione;
while(1){
/* Seleziono l'opzione dal menù principale*/
opzione = modalita();
/* Chiamo la funzione specifica per l'opzione selezionata */
if(opzione==1) manutenzioneMain();
if(opzione==2) startServer(argv);
if(opzione==3) chiusuraServer();
}
}
}