From e81b212101eb9f0bb2d32933c5ec640169aedbe6 Mon Sep 17 00:00:00 2001 From: Andrea Covelli <34921854+AndreaCovelli@users.noreply.github.com> Date: Thu, 9 Jan 2025 15:48:30 +0100 Subject: [PATCH] [Reti informatiche] Caricato progetto dello studente Giulio Zingrillo che ringraziamo per averci fornito il sorgente del suo progetto --- .../.vscode/settings.json | 11 + .../A.A.24-25 - Zingrillo/.vscode/tasks.json | 28 ++ .../Documentazione_Zingrillo.pdf | Bin 0 -> 79653 bytes .../A.A.24-25 - Zingrillo/Makefile | 35 ++ .../A.A.24-25 - Zingrillo/client | Bin 0 -> 21848 bytes .../A.A.24-25 - Zingrillo/client.c | 326 ++++++++++++++++++ .../A.A.24-25 - Zingrillo/client.o | Bin 0 -> 11400 bytes .../A.A.24-25 - Zingrillo/include/common.h | 8 + .../A.A.24-25 - Zingrillo/include/dashboard.h | 1 + .../A.A.24-25 - Zingrillo/include/database.h | 72 ++++ .../A.A.24-25 - Zingrillo/include/game.h | 2 + .../A.A.24-25 - Zingrillo/include/params.h | 11 + .../A.A.24-25 - Zingrillo/include/quiz.h | 34 ++ .../A.A.24-25 - Zingrillo/modules/common.c | 108 ++++++ .../A.A.24-25 - Zingrillo/modules/common.o | Bin 0 -> 4224 bytes .../A.A.24-25 - Zingrillo/modules/dashboard.c | 117 +++++++ .../A.A.24-25 - Zingrillo/modules/dashboard.o | Bin 0 -> 5312 bytes .../A.A.24-25 - Zingrillo/modules/database.c | 299 ++++++++++++++++ .../A.A.24-25 - Zingrillo/modules/database.o | Bin 0 -> 7408 bytes .../A.A.24-25 - Zingrillo/modules/game.c | 209 +++++++++++ .../A.A.24-25 - Zingrillo/modules/game.o | Bin 0 -> 7816 bytes .../A.A.24-25 - Zingrillo/modules/quiz.c | 168 +++++++++ .../A.A.24-25 - Zingrillo/modules/quiz.o | Bin 0 -> 5712 bytes .../A.A.24-25 - Zingrillo/quiz/1.quiz | 5 + .../A.A.24-25 - Zingrillo/quiz/2.quiz | 5 + .../A.A.24-25 - Zingrillo/quiz/3.quiz | 5 + .../A.A.24-25 - Zingrillo/quiz/4.quiz | 5 + .../A.A.24-25 - Zingrillo/quiz/5.quiz | 5 + .../A.A.24-25 - Zingrillo/quiz/6.quiz | 5 + .../A.A.24-25 - Zingrillo/quiz/indice.quiz | 7 + .../A.A.24-25 - Zingrillo/readme.md | 18 + .../A.A.24-25 - Zingrillo/server | Bin 0 -> 31968 bytes .../A.A.24-25 - Zingrillo/server.c | 140 ++++++++ .../A.A.24-25 - Zingrillo/server.o | Bin 0 -> 4960 bytes .../A.A.24-25 - Zingrillo/start.sh | 31 ++ .../Progetti/progetto2024-2025.pdf | Bin 0 -> 194759 bytes 36 files changed, 1655 insertions(+) create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/.vscode/settings.json create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/.vscode/tasks.json create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/Documentazione_Zingrillo.pdf create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/Makefile create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/client create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/client.c create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/client.o create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/include/common.h create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/include/dashboard.h create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/include/database.h create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/include/game.h create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/include/params.h create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/include/quiz.h create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/common.c create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/common.o create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/dashboard.c create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/dashboard.o create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/database.c create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/database.o create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/game.c create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/game.o create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/quiz.c create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/quiz.o create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/1.quiz create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/2.quiz create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/3.quiz create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/4.quiz create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/5.quiz create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/6.quiz create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/indice.quiz create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/readme.md create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/server create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/server.c create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/server.o create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/start.sh create mode 100644 TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/progetto2024-2025.pdf diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/.vscode/settings.json b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/.vscode/settings.json new file mode 100644 index 00000000..a8e19269 --- /dev/null +++ b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "files.associations": { + "cstdlib": "c", + "*.tcc": "c", + "memory": "c", + "new": "c", + "array": "c", + "string": "c", + "string_view": "c" + } +} \ No newline at end of file diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/.vscode/tasks.json b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/.vscode/tasks.json new file mode 100644 index 00000000..df74fa09 --- /dev/null +++ b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: gcc compila il file attivo", + "command": "/usr/bin/gcc", + "args": [ + "-fdiagnostics-color=always", + "-g", + "${file}", + "-o", + "${fileDirname}/${fileBasenameNoExtension}" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "Attività generata dal debugger." + } + ], + "version": "2.0.0" +} \ No newline at end of file diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/Documentazione_Zingrillo.pdf b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/Documentazione_Zingrillo.pdf new file mode 100644 index 0000000000000000000000000000000000000000..332465a6dac926bdfc6cf4704ca7c91feedf53df GIT binary patch literal 79653 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

CJ0HTEfl|{k+6S>H{S%O2?sX4I_ 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 PMHm^&YH8WJ+R6S4eC3Ge literal 0 HcmV?d00001 diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/Makefile b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/Makefile new file mode 100644 index 00000000..0df51c52 --- /dev/null +++ b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/Makefile @@ -0,0 +1,35 @@ +# Variabili +CC = gcc +CFLAGS = -Wall +LDFLAGS = + +# File sorgente +SERVER_SOURCES = server.c modules/quiz.c modules/game.c modules/common.c modules/database.c modules/dashboard.c +CLIENT_SOURCES = client.c modules/common.c + +# File oggetto +SERVER_OBJECTS = $(SERVER_SOURCES:.c=.o) +CLIENT_OBJECTS = $(CLIENT_SOURCES:.c=.o) + +# Eseguibili +SERVER_EXECUTABLE = server +CLIENT_EXECUTABLE = client + +# Regola per costruire tutto +all: $(SERVER_EXECUTABLE) $(CLIENT_EXECUTABLE) + +# Regola per costruire il server +$(SERVER_EXECUTABLE): $(SERVER_OBJECTS) + $(CC) $(LDFLAGS) -o $@ $^ + +# Regola per costruire il client +$(CLIENT_EXECUTABLE): $(CLIENT_OBJECTS) + $(CC) $(LDFLAGS) -o $@ $^ + +# Regola per costruire i file oggetto +%.o: %.c + $(CC) $(CFLAGS) -c -o $@ $< + +# Regola per pulire i file generati +clean: + rm -f $(SERVER_OBJECTS) $(CLIENT_OBJECTS) $(SERVER_EXECUTABLE) $(CLIENT_EXECUTABLE) \ No newline at end of file diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/client b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/client new file mode 100644 index 0000000000000000000000000000000000000000..df37077eb2681a1a79161210c68d1ebbf4d7f76a GIT binary patch literal 21848 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 af7M_TsB#rV+o(g?-?3b1Otcx;SoVKf3{u?y literal 0 HcmV?d00001 diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/client.c b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/client.c new file mode 100644 index 00000000..7ede0587 --- /dev/null +++ b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/client.c @@ -0,0 +1,326 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "include/common.h" +#include "include/params.h" + +// Funzione che previene il comportamento standard in caso di SIGPIPE, che termina il processo. +// Viene stampato un messaggio di errore e si permette al gestore degli errori di send di gestire l'errore. +void handle_sigpipe(int sig) +{ + printf("Connessione chiusa dal server\n"); +} + +// Funzione che stampa il messaggio di benvenuto +void stampaMenu() +{ + printf("Menù:\n"); + printf("1 - Comincia una sessione di Trivia\n"); + printf("2 - Esci\n"); + printplus(); +} + +// Funzione che gestisce l'interfaccia iniziale del client +bool menuIniziale() +{ + int scelta = 0; + int ret = 0; + do + { + intro(); + stampaMenu(); + printf("\nLa tua scelta: "); + ret = scanf("%d", &scelta); + // Pulisco il buffer di input per gestire il caso in cui l'utente abbia inserito + // input non numerici + while (getchar() != '\n') + ; + if (ret != 1 || (scelta != 1 && scelta != 2)) + { + printf("\nScelta non valida\n\n"); + } + else if (scelta == 2) + { + return false; + } + } while (scelta != 1); + return true; +} + +// Funzione che gestisce l'interfaccia per la scelta del nickname +void scegliNickname(int sd) +{ + char buffer[TEXTLEN], ok[TEXTLEN]; + intro(); + while (1) + { + printf("Inserisci il tuo nickname (max %d caratteri): ", TEXTLEN - 1); + // Leggo il nickname da tastiera + if (fgets(buffer, sizeof(buffer), stdin) != NULL) + { + size_t len = strlen(buffer); + // Rimuovo il carattere di nuova linea se presente + if (len > 0 && buffer[len - 1] == '\n') + { + buffer[len - 1] = '\0'; + len--; + } + else + { + // Se non c'è un carattere di nuova linea, allora l'input è stato troncato + // e devo svuotare il buffer di input + int ch; + while ((ch = getchar()) != '\n' && ch != EOF) + ; + printf("Errore: il nickname supera la lunghezza massima di %d caratteri\n", TEXTLEN - 1); + continue; + } + + // Controllo se l'input è vuoto + if (len == 0) + { + printf("Errore: il nickname non può essere vuoto\n"); + continue; + } + + break; // Esco dal ciclo se il nickname è stato letto correttamente + } + else + { + printf("Errore durante la lettura dell'input\n"); + } + } + inviaMsg(buffer, sd, false); // Invio il nickname al server + riceviMsg(ok, sd, false); // Ricevo la risposta del server + if (strcmp(ok, "1") == 0) + { + printf("\nNickname accettato\n\n"); + } + else if (strcmp(ok, "0") == 0) + { + printf("\nNickname rifiutato\n\n"); + scegliNickname(sd); + } + else + { + printf("Errore durante la ricezione della risposta del server\n"); + exit(EXIT_FAILURE); + } +} +// Funzione che mostra la classifica +void mostraClassifica(int sd) +{ + int num_temi; + char bufferOut[TEXTLEN]; + riceviMsg(bufferOut, sd, false); // Ricevo il numero di temi + num_temi = atoi(bufferOut); + printf("\n"); + intro(); + for (int k = 0; k < num_temi; k++) + { + int num_partecipanti; + riceviMsg(bufferOut, sd, false); // Ricevo il numero di partecipanti + num_partecipanti = atoi(bufferOut); + printf("Punteggio tema %d\n", k + 1); + for (int j = 0; j < num_partecipanti; j++) + { + int punteggio; + riceviMsg(bufferOut, sd, false); // Ricevo il nickname + punteggio = atoi(bufferOut); + riceviMsg(bufferOut, sd, false); // Ricevo il punteggio + printf("- %s %d\n", bufferOut, punteggio); + } + printf("\n"); + } +} + +// Funzione che gestisce l'interfaccia per la scelta del quiz +// Restituisce false se non ci sono quiz disponibili, true altrimenti +bool scegliQuiz(int sd, char *nomeQuiz) +{ + // Recupero i quiz dal server + char buffer[TEXTLEN]; + int numQuiz, scelta = 0, ret = 0; + riceviMsg(buffer, sd, false); // Ricevo il numero di quiz disponibili + numQuiz = atoi(buffer); + if (numQuiz == 0) + { + printf("Non ci sono quiz disponibili\n"); + return false; + } + char *nomiTemi[numQuiz]; + printf("Quiz disponibili:\n"); + printplus(); + printf("\n"); + for (int i = 1; i <= numQuiz; i++) // Ricevo i nomi dei quiz + { + riceviMsg(buffer, sd, false); + nomiTemi[i - 1] = (char *)malloc((strlen(buffer) + 1) * sizeof(char)); + gestisciErroriMalloc(nomiTemi[i - 1]); + strcpy(nomiTemi[i - 1], buffer); + printf("%d - %s\n", i, buffer); + } + + printplus(); + printf("\n"); + do { + char buffer[TEXTLEN]; + printf("La tua scelta: "); + if (fgets(buffer, sizeof(buffer), stdin) != NULL) { + // Rimuovo il carattere di nuova linea se presente + size_t len = strlen(buffer); + if (len > 0 && buffer[len - 1] == '\n') { + buffer[len - 1] = '\0'; + } + + // Controllo se l'input è ENDQUIZ o SHOWSCORE + if (strcmp(buffer, FINEQUIZ) == 0) { + printf("Quiz terminato.\n"); + inviaMsg(buffer, sd, false); + return false; + } else if (strcmp(buffer, MOSTRAPUNTEGGIO) == 0) { + inviaMsg(buffer, sd, false); + mostraClassifica(sd); + continue; + } + + // Converto l'input in un numero + ret = sscanf(buffer, "%d", &scelta); + if (ret != 1 || scelta < 1 || scelta > numQuiz) { + printf("Scelta non valida\n"); + } + } else { + printf("Errore durante la lettura dell'input\n"); + } +} while (scelta < 1 || scelta > numQuiz); + sprintf(buffer, "%d", scelta); + inviaMsg(buffer, sd, false); // Invio la scelta al server + strcpy(nomeQuiz, nomiTemi[scelta - 1]); // Salvo il nome del quiz scelto + for(int i=0; i 0 && bufferOut[len - 1] == '\n') + { + bufferOut[len - 1] = '\0'; + len--; + } + else + { + // Se non c'è un carattere di nuova linea, allora l'input è stato troncato + // e devo svuotare il buffer di input + int ch; + while ((ch = getchar()) != '\n' && ch != EOF) + ; + printf("Errore: il messaggio supera la lunghezza massima di %d caratteri\n", TEXTLEN - 1); + continue; + } + + // Controllo se l'input è vuoto + if (len == 0) + { + printf("Errore: il messaggio non può essere vuoto\n"); + continue; + } + + break; // Esco dal ciclo se il messaggio è stato letto correttamente + } + + inviaMsg(bufferOut, sd, false); // Invio la risposta al server + if (strcmp(bufferOut, FINEQUIZ) == 0) + { + printf("Quiz terminato.\n"); + return false; + } + if (strcmp(bufferOut, MOSTRAPUNTEGGIO) == 0) + { + i--; // Decremento i in modo che la prossima iterazione mostri la domanda corrente + mostraClassifica(sd); + continue; + } + riceviMsg(bufferOut, sd, false); // Ricevo la valutazione della risposta + ok = strcmp(bufferOut, "1") == 0; + if (ok) + { + printf("\nRisposta corretta\n\n"); + } + else + { + printf("\nRisposta errata\n\n"); + } + } + return true; +} + +int main(int argc, char *argv[]) +{ + if (argc != 2) + { + printf("Client lanciato in modo errato.\nUtilizzo corretto: ./client \n"); + exit(EXIT_FAILURE); + } + signal(SIGPIPE, handle_sigpipe); + while (menuIniziale()) + { + char nomeQuiz[TEXTLEN]; + int ret, sd; + struct sockaddr_in server_address; + sd = socket(AF_INET, SOCK_STREAM, 0); + if (sd == -1) + { + perror("Errore durante la creazione del socket"); + exit(EXIT_FAILURE); + } + // inizializzo la struttura per la connessione al server + server_address.sin_family = AF_INET; + server_address.sin_port = htons(atoi(argv[1])); + inet_pton(AF_INET, SERVER_IP, &server_address.sin_addr); + // mi connetto al server + ret = connect(sd, (struct sockaddr *)&server_address, sizeof(server_address)); + // controllo se la connessione è andata a buon fine + if (ret == -1) + { + perror("Errore durante la connessione al server"); + exit(EXIT_FAILURE); + } + scegliNickname(sd); + while (scegliQuiz(sd, nomeQuiz) && giocaQuiz(sd, nomeQuiz)) + ; + close(sd); // chiudo la connessione con il server + } + return 0; +} diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/client.o b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/client.o new file mode 100644 index 0000000000000000000000000000000000000000..a2d1102d4759118a7e79b1897d1b4adbc6b4c48f GIT binary patch literal 11400 zcmbtZe{dAl9e9JAVmC7XO`?pAp6<6Bd9#s?V`JGz;mQA6p}X(v zxnp(imQVEJ2<+6|-hQmRUO7-EoZh1lmDk-k*pqOVF9D{A>4lp5Y0#;=EhigFy)8q? z>}@%Yl|RaF`GP6dGNii)D|NXo$GiBvxs$cok8@j&hq85rmZ99qkaH=otDFn`ahy3A z_Byho_zZ&=c>HiaF+4oH8-1x4R-BCKGsbhpoe_K#am==3v#J<#d*1qVcv!K|*Lm+S z3M%{1@6ZbuqwRVzKLq3VV(_H*^?WJ3{Yk&GjJx@M;Oe;^teA77UJyWkDEz|q5h!Ru zZFVYw4|*umbI;(IP~U%OYSYT5<#*`Yj;-aZ@-fUl_xUcUXq1jLlyvv#BKOz5`5!?S zy16&MOSB3_KB}1S1K`Z~Au6-c%|8ckxgLD7teQ+bngb0r5I)Y+qkVeruOZ#--iA*xFr(UAg{{9_srgwz*dNiI4R4r8?c+uW$Pk z8$zw#)u+Fz&pqs12o7LC)N?zgoD9Q&!2#WUY1_NQ(AK9P_S^Y4oVt3B=K4qLp`&_k zG;Banl}73N`>XZ+N2_%=UqU6zyBA*`ex~|C>&-t2L|j1w2jKA;{0Q@f3f(xmxVr3I zG_2sw9sPsuj_E6K`NgHfW%vy^P{51caTU~E?Dj%d-a~W`@%TY0%1!Yo^Lg~bJ7?gL z0ET%Rgm1U+8o$@y*!v)B&)nFXaHoe9gHEYGIQlo}=v)t0%()uO^Z;*TM=osa7ZDgX zc0|jPDs7k7`Reh=`C);PN_u-4dq2^wlEfKj6H&JcFsjDxRng-KJ3W6^&)KLmVd zxqR*AdT<4XvJ(q@QRYiuALq5^a{q7nuP2Ti7v6afm`2BjcdSCBtP0ntqAI>=z)`&8 zNmTN0d>_Q43kCXzRB!%i0MOFGt3<9Ax)IW&r)6x8^I(_5J}=8Q|Bhce7Q64kz2k^_ z@6e0p(L0;gG~M0QN^Vx$jy3Yl?scxk^SD~+W`{Se{80c=p@Al#!Um31@6w?dDfA7v zVfitm>CZ1O0VDi{Fa#k`7eaQtlAQxT1|?B5Ad`jBkNO7Qcz|2s#ses9fM?uzmYnO2 zr%q9|YXH}t?@M@5eR-B!Oy$Gkd18H~r8gn>3`P=C1|uj}nRSjzgdZ+Fn12TZZSBD) zt8hD3Y=)y7r_c3ZRTJL%EL8v7E!n>=!FgN)Unwb?<5#IFNA(N2k;xP2;67Zsd@~!k z3ic}Q^}TrR?1SX?I^6sbm?PJN&*3vpW?yKVcN40DYknTJf|F>pUMOF}!@npAC%3uz zcd@_7Z!JKpfm5{XorC_&da;Ois{&WxMSgO-hlCK$c6d4t8EF4#kHId~v! zGXmdUawY|KWnVo_hQDsNm%{niKpID2kE!st4P(to+cq;9D`}frw8P3~3@v8FwTzkG zV5Zq^rhQ<~Jn%GY&}M4Q$%JJ`Ekn!N1~9~^n58XGTN^Bc%?3_OCTg+T#fIi&ffF_3 zjxkST^)Xg^2Y=D*q^)f*;#SPSyD(d1!&DXw(yTa)NouwgU2hu+Q=67BHfr@TEo!6< z#{trG5X4&2>15iRhwL&llTDdvLyN=zS-ZW%?CdnOgaPU$z!>W^8GKHhw~`!GEtNg+ ztOll;X;a&fO*%;=L-F`pESolL$K-RFjstI6%#6pUT6QYyum)DUM5=E@qd+j6WG$OT z;I!3dWj#1RZrX~Poje{W+0ei{sbt3C6Un$N&4Lo`?N(BAOfa%OR?B8;^%>q+0#<-K zGf6wC-J7*K!37||w$@p3i`}jO^B8y-ht@JRW~Lp(;ocDNKg1raiLgvZ@@o)Thypt! zq#oIm2Qq7y3EeSrULk%@fSV0n}8qMXVBENh{G(rFAzE%Pxm4e90OB5K$iw@llC z_+p|vNzJmgL^77tI4v2eUEzQmJ3Et7R&t&exi;zzT98Vn9pgrBsHY#zmuT8F%5jD8 zMAw^;F|%)o%!2vnW}i{>o%GH#g7Irma{9nUK{Q8X|Kdvt~AA`D?@1XU~qz znloL%Tr~V?f`2A3{Ooh{k`)ZL&k|zQ@WV3Rt5~RW84GQ!3r!j`YIGNDw3h*nKP*?^ zqh(y(169pqN3H?_ykg%1#Gx$2hwR_v_pd=5${+C|`>PId0*>E|IFu8(vCIDI4?;-5 z{>QKr$|I-sKg9c|0RAi9%h+)=NRD6fQ1#B59V2ohtKY5xK`7@v!FvMF4#}(jUX`4u z2IWI};k0?4;q!PsXFicy!~Vu^TxxH1#V>T|bN=z|G&*if7ZUyzqW4m$F>Y#^3;^;a zkNX}l{QOsm|3$%%LXCyT0_sNiRpO5U!z$r71@Kn{;CBV!HsGlLJaixw9($;_z^~H0 zxd7Y^z`FwQM+5LD0`R8-@Sg#W`ZtIL#B&p{QUD+Sy02u{ZvjU+uVC&%;W-TT5%^W& zzY~Dtht*2_e+S^_2gLWH0DL0gsAtc4AP@>)Lr`BS@U>$&?5!PWP7RO~3Ba!lz!wDI z3j^@Q0r>I&oOye9B+5DrI~F%vGgf=bN|_AK^9+MyH<2>n7L;YFv}HS~cs9cl@Vdyh zIxQn^G62&_*4k>phCX+0YbI*gZLHmNq8&yWU=R>p-x}>$-`ZwaaRwKn_P8bQ2p~RY z*{ludI8{1s+8_^ZQnzK=8D0Z6SlEJ|Xd=bTjh4d_a1%%y&2hZlv{_Mu!5L+tu6#aE zJf86^VZ`IfC}@&#@OH(IBkMK~M1iSIL}^d!3^%cjwWUpy!QCQi2uYwLc*QnAfA7?S z>lWO?Scj9eGoZ2Qw5FiR_(>IYz@^EI>7@hYj8|~W#ijBIT!*oIPT-jKxEo6R8i7l` zi}z&#{51q01#PM4w+W6*LgMnQLc2y19QPM2(yrURSGG&k z$j384%GoP$$zLblUlTR*&xfDnA0{|1MTvhba4AQ|teH6>hgirmmRN+q%`mGA!Zz4FZ1!-3|!7n1X+*h$1*UKUy|EGjMp78ewT=H)f z{QZPa_5Z!XUn}@;5k8gw7lpr0@INGcD*qFLk0W}HKx3d_H#Rp5Ib#KmainrCAvpfa zko4OOg46s=5S;pRGr=z*a&{1WBEi2yaGK})2~Oqr5uD2J7r3&w? zSW)@c5S+?iLU77A1uo}(SRz`Iry43O~#we42+h5FArL z>fc0gn&-;|F6FNj@>>ZXn^I02;nO_tBz&6Z4-h`;FXOV4@M#=>NN~C?P7s{lPbT4| z4T{u1F7%%!aP%h*mHIa*{O1IJF5y#s?j$&kyQRpH>(n89x?b*A_;Q_olkn-hk1Kq+ z9-kt7D*q*d({*>0;54s3P~^*d(LV{F${&wTha&y_j_})M0!Ken{p%I}M}j{yfWMmH zbX|N`kuye|_m2}ko%bgMr}vy)L=NgI^Pz|EuO#@J1iy;l$A}zMWx3GjIN?tr{8I#{ z`dp4iLP1^V`9784_0T8vY!@$dUK9ZxKG#|6zht{eM7k zdN18WaQxOL^*>B-jo|MSd>X+&Bsgx>QcfLC1_k|w6p3rl#)AG4sm9+M`P0X*5btXh zJSyI|D!BZf_I(AH->FIpF26hVE4cj5Gg{nJq@MCS4~t|rB^+ZN)DC>~#=1kc(q`O< zIOax&MPl%6okiAVGAxo#dN0vr0=}R?pPh8f2z-m4$v={a_jWrQNu`tUg~8bbV^EUW z(b|@Ve-RQI{(qGQ!_g#hO)Cp)6s-v&Ua~`&FJBqn^)Qx=WyEXj#zP9qL_B1m;I@Qg z#j(vqH^ZDqTr3A@d1a+Cuf)~)uYnGfd9LFdU@Xd{IR~$7m6(6GB3SB=94vF;hvR4A z3n_JY*g!%3Xp#EMdLeYmHsvi4<0*!1mAecuyeFvoH;VBZ^wFZ~e-Ct`Om+NPIbNAi z9gkU9DgJ%9X+bIRrx$;`I?3@e{*~s&AzSgVgK|XpAGcwgM;(tcl@I{}@xx6S%4$V_ W<(1(brPBDWX?!?yysG?E$NvXrzm9 +#include + +// Strutture dati e funzioni finalizzati a contenere i dati degli utenti e a gestire le operazioni su di essi + +struct punteggioTema +{ + bool completato; // true se il tema è stato completato dall'utente, false altrimenti + bool giocato; // true se l'utente ha giocato il tema, false altrimenti + int punteggio; // punteggio ottenuto dall'utente nel tema +}; + +// Struttura dati per l'albero binario di ricerca degli utenti +// Ordinato per nickname alfabeticamente +struct utente +{ + char nickname[TEXTLEN]; // nickname dell'utente + struct punteggioTema *punteggioTemi; + struct utente *left; // puntatore al figlio sinistro nell'albero binario di ricerca + struct utente *right; // puntatore al figlio destro nell'albero binario di ricerca +}; + +// Struttura dati per l'albero binario di ricerca dei punteggi +// Ordinato per punteggio decrescente e, in caso di parità, per nickname alfabeticamente +struct punteggio +{ + struct utente *giocatore; // utente a cui è associato il punteggio + int punti; // punteggio ottenuto dall'utente + struct punteggio *left; // puntatore al figlio sinistro nell'albero binario di ricerca + struct punteggio *right; // puntatore al figlio destro nell'albero binario di ricerca +}; +struct utenti +{ + struct utente *root; // radice dell'albero binario di ricerca + pthread_mutex_t mutex; // mutex per la mutua esclusione + int numUtenti; // numero di utenti registrati +}; +struct classifica +{ + struct punteggio **vettorePunteggi; // vettore di punteggi per ogni tema + int *vettorePartecipanti; // vettore con il numero di partecipanti per ogni tema + int *vettoreCompletati; // vettore con il numero di utenti che hanno completato il tema + pthread_mutex_t *vettoreMutex; // vettore di mutex per la mutua esclusione +}; +// Struttura dati da passare al thread che gestisce la connessione con un client +struct game +{ + struct quiz *q; // quiz + struct utenti *players; // utenti + struct classifica *classifica; // classifica + int socket; // socket +}; + +// Struttura dati da passare al thread che gestisce il pannello di controllo +struct datiPdC +{ + struct utenti *players; // utenti + struct classifica *score; // classifica + struct quiz *q; // quiz +}; + +void inserisciUtente(struct utenti *, struct utente *); +bool controllaNickname(char *, struct utenti *); +struct punteggio *creaPunteggio(struct utente *, int); +void inserisciInClassifica(struct classifica *, struct utente *, int, int); +void eliminaDaClassifica(struct classifica *, char *, int, int); +void eliminaTuttiPunteggi(struct classifica *, struct utente *, int); +struct utente *eliminaUtente(struct utente *, char *nickname, int, struct classifica *); +void eliminaDaDB(struct utenti *, char *, int, struct classifica *); +void svuotaDBMutex(struct utenti *); +void svuotaClassifica(struct classifica *, int); diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/include/game.h b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/include/game.h new file mode 100644 index 00000000..886904c8 --- /dev/null +++ b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/include/game.h @@ -0,0 +1,2 @@ +void *partita(void *); +void *pannelloDiControllo(void *); \ No newline at end of file diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/include/params.h b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/include/params.h new file mode 100644 index 00000000..5a808127 --- /dev/null +++ b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/include/params.h @@ -0,0 +1,11 @@ +#define TEXTLEN 256 // Lunghezza massima di un messaggio +#define THEMESIZE 5 // Numero di domande per ogni tema +#define QUIZFILENAMELEN 10 // Lunghezza massima del nome del file del quiz +#define PORT 3000 // Usata anche da altre applicazioni, come React e NodeJS, ma non le includiamo in questo progetto +#define SERVER_IP "127.0.0.1" +#define BACKLOG 20 // Numero massimo di connessioni in attesa di essere gestite +#define NUMPLUS 50 // Numero di caratteri '+' da stampare nei messaggi client +#define FINEQUIZ "endquiz" // Comando per terminare il quiz +#define MOSTRAPUNTEGGIO "show score" // Comando per visualizzare il punteggio +#define UPDATETIME 3 // Tempo di aggiornamento del pannello di controllo +#define CONNECTION_CLOSED 2 // Codice di errore per la chiusura della connessione \ No newline at end of file diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/include/quiz.h b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/include/quiz.h new file mode 100644 index 00000000..cdb5f782 --- /dev/null +++ b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/include/quiz.h @@ -0,0 +1,34 @@ +#include "params.h" +#include + +// Struttura dati per le risposte, organizzate in una lista +struct risposta +{ + char testo[TEXTLEN]; // Testo della risposta + struct risposta *next; // Puntatore alla risposta successiva +}; + +// Struttura dati per le domande, organizzate in un array statico +struct domanda +{ + char testo[TEXTLEN]; // Testo della domanda + struct risposta risposte; // Risposte della domanda +}; + +// Struttura dati per i temi, organizzati in un array dinamico +struct tema +{ + char nome[TEXTLEN]; // Nome del tema + struct domanda domande[THEMESIZE]; // Domande del tema +}; + +struct quiz +{ + int n_temi; // Numero di temi, dinamico perché deciso al momento del parsing + struct tema *temi; // Temi del quiz +}; + +void parse(struct quiz *); +bool rispostaCorretta(struct domanda *, char *); +void listaTemi(struct quiz *); +void eliminazioneQuiz(struct quiz *); \ No newline at end of file diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/common.c b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/common.c new file mode 100644 index 00000000..779e466d --- /dev/null +++ b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/common.c @@ -0,0 +1,108 @@ +// Modulo di utilità in comune tra client e server + +#include +#include +#include +#include +#include +#include +#include +#include +#include "../include/params.h" +#include "../include/common.h" + +// Funzione di utilità che stampa un numero di caratteri '+' pari a NUMPLUS +void printplus() +{ + for (int i = 0; i < NUMPLUS; i++) + printf("+"); +} + +// Funzione di utilità che stampa il messaggio di benvenuto +void intro() +{ + printf("Trivia Quiz\n"); + printplus(); + printf("\n"); +} + +// Funzione di utilità che gestisce gli errori di invio +void gestisciErroriSend(int ret, int len, int sd, bool callFromThread) +{ + if (ret != len) + { + // Se la connessione è stata chiusa dall'altro host, chiudo la connessione e termino il thread o il processo + if (ret == -1 && (errno == EPIPE || errno == ECONNRESET)) + { + close(sd); + callFromThread ? pthread_exit(NULL) : exit(CONNECTION_CLOSED); + } + else + { + // Altrimenti, stampo un messaggio di errore e termino il processo (nel caso di un thread server, l'intero processo) + perror("Errore durante l'invio del messaggio"); + exit(EXIT_FAILURE); + } + } +} + +// Funzione di utilità che invia un messaggio al socket sd +// Il parametro callFromThread è true se la funzione è chiamata da un thread, false altrimenti +void inviaMsg(char *msg, int sd, bool callFromThread) +{ + uint32_t lenNet; // utilizzo un tipo certificato per la lunghezza del messaggio + int len, ret; + // invio la lunghezza del messaggio, non comprensiva del carattere di terminazione + len = strlen(msg); + lenNet = htonl(len); // converto la lunghezza in formato network + ret = send(sd, &lenNet, sizeof(u_int32_t), 0); + gestisciErroriSend(ret, sizeof(u_int32_t), sd, callFromThread); + // invio il messaggio + ret = send(sd, msg, len, 0); + gestisciErroriSend(ret, len, sd, callFromThread); +} + +// Funzione di utilità che gestisce gli errori di ricezione +void gestisciErroriRecv(int ret, int len, bool callFromThread, int sd) +{ + // Se la connessione è stata chiusa dall'altro host, chiudo la connessione e termino il thread o il processo + if (!ret) + { + printf("La connessione è stata chiusa\n"); + close(sd); + callFromThread ? pthread_exit(NULL) : exit(CONNECTION_CLOSED); + } + // Altrimenti, stampo un messaggio di errore e termino il processo (nel caso di un thread server, l'intero processo) + else if (ret != len) + { + perror("Errore durante la ricezione del messaggio"); + close(sd); + exit(EXIT_FAILURE); + } +} +// Funzione di utilità che riceve un messaggio dal socket sd +// Il parametro callFromThread è true se la funzione è chiamata da un thread, false altrimenti +void riceviMsg(char *msg, int sd, bool callFromThread) +{ + int ret; + uint32_t len; // utilizzo un tipo certificato per la lunghezza del messaggio + // ricevo la lunghezza del messaggio + ret = recv(sd, &len, sizeof(uint32_t), 0); + len = ntohl(len); // converto la lunghezza in formato host + gestisciErroriRecv(ret, sizeof(uint32_t), callFromThread, sd); + // ricevo il messaggio + ret = recv(sd, msg, len, 0); + gestisciErroriRecv(ret, len, callFromThread, sd); + // aggiungo il carattere di terminazione della stringa + msg[len] = '\0'; +} + +// Funzione di utilità che gestisce gli errori di allocazione della memoria +void gestisciErroriMalloc(void *ptr) +{ + if (ptr == NULL) + { + perror("Errore durante l'allocazione della memoria"); + exit(EXIT_FAILURE); + } +} \ No newline at end of file diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/common.o b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/common.o new file mode 100644 index 0000000000000000000000000000000000000000..ebddcc5a7f75417c354b8a0b0d3d8f9345d4742d GIT binary patch literal 4224 zcmbuBU2GIp6vyutD2hNUexQMviC4QOChuxt&u$^hVJ#Y5 zjJ})H7b<%FIlUGfqR30(uGq7}CTd!+y3sF&k5}|XK0$eWfd#9kn$vWNX^h)fGKH4H&N{={Z7G$Os0xnxxI>tZJn*0#WBjr4irOgLZBXD(vq zFPGD;p<3*@&_7)noS{X2BPqz+$WI%U@Vano^$2MWv9l`8UMm<|k_81T;R*`D7b#^d+^%f9x#sftVuwueoIlplwNvgi%H3QP-bC(Z)!d!IW^T62PjgL_)Se52 zvz7jvt;vcmQ?BMj2su~eKu_Xo;>8spMXvF*VQ5TPI@UmSFAXHA^KoZ#EoCCe1(WdN#%0yL{LF1)yVUm9fe23-PMMi=D%q+zKO11vSxo7%8? zJn>G^11=)(5zP9(huH9?83uHh;=yrjVq;V5^tEqntoTQAK(09ER8^Hf zXZLoFg1Anyk8?;2`Ns25Wg`LD3%fX{#2%%qo&6?me~4O0IleQtliGIn`#SIg9r&vq z_!}L#MI7tDK`kVHrqnugwOdcvfuHQa%N_Xp#4+y&{L#c`h1e&Yug52YM4Xk+sNZfq z=R0teIK=;j$BEApF_w3Shg~O~XCt2N1S6%;XCq;dFPa{svFBpsvmwh5Y(H3ps1d4%i5pxClhGsox)Be&CfXhZO_YDKS5Z zLiHwpESE1H%N;T8k}}hPl^Pv|{14x4H zqh<)6r9K4qE9nyaML-g8T!J42BvIp^PH@ccroOPRcHkdN9PgO0KPT~fBreV&=3OoE z%iLb<3p&UTNfWOJzfL0ljKt+QtN6J?{2s}Ey~J_eM4W9BzgOb>B#!zj>} zX^W!gStTfYh2Ozc*qIUBc4lzFgQ*= zh-4LWM?7;FUz-0f8il|S>{dc$`M6vBAn`Fjt_^F{OPtYcgCw1o@iLNBxj)_!_;So1 zf|BG(y1 +#include +#include +#include +#include + +// Funzione che stampa i punteggi di un utente, facendo una visita in-order dell'albero binario di ricerca +void stampaPunteggi(struct punteggio *root) +{ + if (root != NULL) + { + stampaPunteggi(root->left); + printf("- %s %d\n", root->giocatore->nickname, root->punti); + stampaPunteggi(root->right); + } +} +// Funzione che stampa gli utenti, facendo una visita in-order dell'albero binario di ricerca +void stampaUtente(struct utente *root) +{ + if (root != NULL) + { + stampaUtente(root->left); + printf("- %s\n", root->nickname); + stampaUtente(root->right); + } +} + +// Funzione che prende il lock sul mutex degli utenti e invoca stampaUtente +void stampaPartecipanti(struct utenti *players) +{ + pthread_mutex_lock(&players->mutex); + printf("Partecipanti (%d)\n", players->numUtenti); + stampaUtente(players->root); + pthread_mutex_unlock(&players->mutex); +} + +// Funzione che stampa gli utenti che hanno completato un tema, facendo una visita in-order dell'albero binario di ricerca +void stampaCompletatiTema(struct utente *root, int tema) +{ + if (root != NULL) + { + stampaCompletatiTema(root->left, tema); + if (root->punteggioTemi[tema].completato) + printf("- %s\n", root->nickname); + stampaCompletatiTema(root->right, tema); + } +} + +// Funzione che prende il lock sul mutex degli utenti e invoca stampaCompletatiTema +void stampaCompletati(struct utenti *players, int num_temi, struct classifica *score) +{ + pthread_mutex_lock(&players->mutex); + for (int i = 0; i < num_temi; i++) + { + printf("Quiz Tema %d completato\n", i + 1); + if (score->vettoreCompletati[i]) + stampaCompletatiTema(players->root, i); + else + printf("------\n"); + printf("\n"); + } + pthread_mutex_unlock(&players->mutex); +} + +// Funzione che prende il lock sul mutex di ogni tema e invoca stampaPunteggi +void stampaClassifica(struct classifica *score, int num_temi) +{ + for (int i = 0; i < num_temi; i++) + { + pthread_mutex_lock(score->vettoreMutex + i); + printf("Punteggio tema %d\n", i + 1); + stampaPunteggi(score->vettorePunteggi[i]); + printf("\n"); + pthread_mutex_unlock(score->vettoreMutex + i); + } +} + +// Funzione che gestisce il pannello di controllo del server +void *pannelloDiControllo(void *dati) +{ + // recupero i dati passati al thread + struct datiPdC *datiConvertiti = (struct datiPdC *)dati; + struct utenti *players = datiConvertiti->players; + struct classifica *score = datiConvertiti->score; + struct quiz *q = datiConvertiti->q; + + listaTemi(q); // Stampo i temi + stampaPartecipanti(players); // Stampo i partecipanti + printf("\n"); + stampaClassifica(score, q->n_temi); // Stampo la classifica + stampaCompletati(players, q->n_temi, score); // Stampo gli utenti che hanno completato un tema + printf("Premere 'q' seguito da invio per terminare il server\n"); + sleep(UPDATETIME); // Attendo UPDATETIME secondi + char buffer[3]; // Se viene digitato 'q' seguito da invio, il server termina + if (fgets(buffer, sizeof(buffer), stdin) != NULL) + { + if (buffer[0] == 'q' && buffer[1] == '\n') + { + printf("Terminazione del server...\n"); + svuotaDBMutex(players); // Svuoto il database utenti + svuotaClassifica(score, q->n_temi); // Svuoto la classifica + eliminazioneQuiz(q); // Elimino il quiz + free(dati); // Libero la memoria allocata per la struttura dati + exit(EXIT_SUCCESS); + } + } + printf("Pulisco lo schermo\n"); // Pulisco lo schermo + system("clear"); // Pulisco lo schermo + + fflush(stdout); // Svuoto il buffer di output + pannelloDiControllo(dati); // Richiamo ricorsivamente la funzione + return NULL; +} diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/dashboard.o b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/dashboard.o new file mode 100644 index 0000000000000000000000000000000000000000..be3d3ac218f375a3c88f3eb7d7bef893ec5496f9 GIT binary patch literal 5312 zcmbuCe~1)S9Khe+oqApBU6=Vg84!PAE_Y%?CAN8P4WV_4YlY=Dw>x_`-R{mhKjgf$ zE-r;_lCFQkq{6_U=#L1({6lh0>NGG;iZF^i!r(%KB8?*sukZKGd$Zr2+byXt%)IwL z-yiS$-kbUE>n`(C`>q8bmBrx`*anv1IbV7XojX%~ zjtBiY1{xtk zSHqc9=B$XEMSj1$4k7%>)cKf3YD6uLz&>Fr{&t;}yZJ9G8B@JrA-Kz`7aV3e(VLvA zyq@M)c1=!B4plB928%eGR=tL0D>40Ie7wB`ks;GKOp6ynJQL``i&Bh_iaxwUa87tu z<#*|#>{q7gwSe7ddHd1J!^9tkcaqdUv;BDvoc2k1*@B^qg+#%8K196kG3h4aZc{nquVlfMG$mz}U(ec@0dA zELd23bc=2GS-)ZCbtSD!9*ss}maJi?OeJe7cB%*LOqR;(n#I_|9Ub>6D-&IihO4x< zN7qH$*0j5P*#7+5wb8b9s|3cp8sKVy3-{{bM-!}$u@W*oO_Vu)!y^6LSfsBdvS{Xv z#vv#+i-F^XlEzzncFV!Kj#<;|c7lbkTaO%MC*A`6wm|kX#@Lxa;gUR47F3G zp6_lYp9RBKV$b&w*kZWwJi@XR0NP7CzNf(21m|xB^!Z*w+W}X#I6G?aUf>viiC6;P zb6^949}}GKHL%y(E@Ly~28#Q<{>`S#g=hWZ}YH+0nUr~ccYjBp157z^uA=)O!bD4o9EDv-XSZXfi+RYD??Ur9UE_{9w<)2 zC9B!Ckug#lgTk8EvsrVK(P8Et%Y-h2!sciY%wTp_*9+j3Hu5aftwSJtk83*Grj1)L zH!u}-s$rRz-ZGaP2`wV@tkFw=EdCX;pT9+phPRH@!%s;4)Z(Tpr( z_@1FOh-(6Vno(j1LGba#M^*AI2tm*uYpCQ;BLoS@dD+LDPlvv=KP^Tsn*R)VzEHyP=MjDj=w<$!3CABi$@>JC^U8G{ zAog_Lw+N?kh6$(Zx)h4P1d|52O6+O;g_sBku8YQBD!9z^9&W|hYGOYVm|WN0gkvq2 zd@JE}e~u7N^M7A(Z1B0-02j(}Vo&q`hHzYiocBkC;SGn$8HfW zlg3J9m20E0-i9OA8SIGVo z-<)NL{Q_Vz&m6H|NVrSv7ZLs<;mw2}AsoM1WPAnsD44%^B>6bT?`57A<7Yx#e#Z=i zxcn|T8shT1q!i-vJ7YA&<#z^)+Iw@3)&;F&`E8HvS$bBB!taa2qG`?1ShUNwS=2K9 z0etf3;HQ&C^QNOm;hT94{|yo2?z|fFLcnqO#;!rBi4=iQIYw}b|WZdpW2-l{*+-q zY`YB@*41$SBf?(+9hGqY&w>(ThW&pN{_^)+#t8fCps05Kiuj0qPdMWF +#include +#include + +// Funzione che inserisce un utente nell'albero binario di ricerca +void inserisciUtente(struct utenti *players, struct utente *new) +{ + pthread_mutex_lock(&players->mutex); + struct utente **current = &players->root; + while (*current != NULL) + { + if (strcmp(new->nickname, (*current)->nickname) < 0) + { + current = &(*current)->left; + } + else + { + current = &(*current)->right; + } + } + *current = new; + players->numUtenti++; // Incremento il numero di utenti registrati + pthread_mutex_unlock(&players->mutex); +} + +// Funzione che controlla se un nickname è già presente nell'albero binario di ricerca +bool controllaNickname(char *nickname, struct utenti *players) +{ + struct utente *p = players->root; + int res; + while (p != NULL) + { + res = strcmp(nickname, p->nickname); + if (res < 0) + p = p->left; + else if (res > 0) + p = p->right; + else + return false; + } + return true; +} + +// Funzione che crea un nuovo nodo per l'albero binario di ricerca dei punteggi +struct punteggio *creaPunteggio(struct utente *player, int punti) +{ + struct punteggio *newNode = (struct punteggio *)malloc(sizeof(struct punteggio)); + gestisciErroriMalloc(newNode); + newNode->giocatore = player; + newNode->punti = punti; + newNode->left = NULL; + newNode->right = NULL; + return newNode; +} + +// Funzione che inserisce un punteggio nell'albero binario di ricerca +struct punteggio *inserisciPunteggio(struct punteggio *root, struct utente *player, int punti) +{ + // Se l'albero è vuoto, crea un nuovo nodo come radice + if (root == NULL) + { + return creaPunteggio(player, punti); + } + // Scorro l'albero per trovare la posizione appropriata + if (punti > root->punti || (punti == root->punti && strcmp(player->nickname, root->giocatore->nickname) < 0)) + { + // Inserisco nel sottoalbero sinistro + root->left = inserisciPunteggio(root->left, player, punti); + } + else + { + // Inserisco nel sottoalbero destro + root->right = inserisciPunteggio(root->right, player, punti); + } + + return root; +} + +// Funzione che inserisce un punteggio nella classifica +void inserisciInClassifica(struct classifica *score, struct utente *player, int punteggio, int quizScelto) +{ + pthread_mutex_lock(score->vettoreMutex + quizScelto - 1); + struct punteggio *p = score->vettorePunteggi[quizScelto - 1]; + score->vettorePartecipanti[quizScelto - 1]++; + if (p == NULL) + { + score->vettorePunteggi[quizScelto - 1] = creaPunteggio(player, punteggio); + pthread_mutex_unlock(score->vettoreMutex + quizScelto - 1); + return; + } + inserisciPunteggio(p, player, punteggio); + pthread_mutex_unlock(score->vettoreMutex + quizScelto - 1); +} + +// Funzione che trova il punteggio minimo nell'albero binario di ricerca +// Utilizzata per eliminare un nodo con due figli +struct punteggio *trovaPunteggioMinimo(struct punteggio *root) +{ + while (root && root->left != NULL) + { + root = root->left; + } + return root; +} + +// Funzione che trova l'utente con nickname alfabeticamente minimo nell'albero binario di ricerca +// Utilizzata per eliminare un nodo con due figli +struct utente *trovaUtenteMinimo(struct utente *root) +{ + while (root && root->left != NULL) + { + root = root->left; + } + return root; +} + +// Funzione che elimina un nodo dall'albero binario di ricerca +struct punteggio *eliminaPunteggio(struct punteggio *root, char *nickname, int punteggio) +{ + + if (root == NULL) + { + return root; // Albero vuoto + } + + // Cercare il nodo da eliminare + if ((punteggio > root->punti) || (punteggio == root->punti && strcmp(nickname, root->giocatore->nickname) < 0)) + { + root->left = eliminaPunteggio(root->left, nickname, punteggio); + } + else if ((punteggio < root->punti) || (punteggio == root->punti && strcmp(nickname, root->giocatore->nickname) > 0)) + { + root->right = eliminaPunteggio(root->right, nickname, punteggio); + } + else + { + // Nodo trovato + // Caso 1: Nessun figlio o un solo figlio + if (root->left == NULL) + { + struct punteggio *temp = root->right; + free(root); + return temp; + } + else if (root->right == NULL) + { + struct punteggio *temp = root->left; + free(root); + return temp; + } + + // Caso 2: Due figli + struct punteggio *temp = trovaPunteggioMinimo(root->right); // Successore in ordine + root->giocatore = temp->giocatore; // Copia i dati del successore + root->punti = temp->punti; + root->right = eliminaPunteggio(root->right, nickname, punteggio); // Elimina il successore + } + return root; +} + +// Funzione che elimina un punteggio dalla classifica, prendendo il lock sul mutex del tema e chiamando eliminaPunteggio +void eliminaDaClassifica(struct classifica *score, char *nickname, int punteggio, int quizScelto) +{ + pthread_mutex_lock(score->vettoreMutex + quizScelto - 1); + struct punteggio *root = score->vettorePunteggi[quizScelto - 1]; + score->vettorePartecipanti[quizScelto - 1]--; + score->vettorePunteggi[quizScelto - 1] = eliminaPunteggio(root, nickname, punteggio); + pthread_mutex_unlock(score->vettoreMutex + quizScelto - 1); +} + +// Funzione che elimina tutti i punteggi di un utente dalla classifica +void eliminaTuttiPunteggi(struct classifica *score, struct utente *player, int num_temi) +{ + for (int i = 0; i < num_temi; i++) + { + if (!player->punteggioTemi[i].giocato) + { + continue; + } + eliminaDaClassifica(score, player->nickname, player->punteggioTemi[i].punteggio, i + 1); + } +} + +// Funzione che decrementa il numero di utenti che hanno completato un tema +// in fase di eliminazione di un utente +void rimuoviDaiCompletati(struct classifica *score, struct utente *player, int num_temi) +{ + for (int i = 0; i < num_temi; i++) + { + if (player->punteggioTemi[i].completato) + { + score->vettoreCompletati[i]--; + } + } +} + +// Funzione che elimina un utente dall'albero binario di ricerca +struct utente *eliminaUtente(struct utente *root, char *nickname, int num_temi, struct classifica *score) +{ + if (root == NULL) + { + return root; // Albero vuoto + } + + // Cerco il nodo da eliminare + if (strcmp(nickname, root->nickname) < 0) + { + root->left = eliminaUtente(root->left, nickname, num_temi, score); + } + else if (strcmp(nickname, root->nickname) > 0) + { + root->right = eliminaUtente(root->right, nickname, num_temi, score); + } + else + { + // Nodo trovato + + // Caso 1: Nessun figlio o un solo figlio + if (root->left == NULL) + { + struct utente *temp = root->right; + rimuoviDaiCompletati(score, root, num_temi); + free(root); + return temp; + } + else if (root->right == NULL) + { + struct utente *temp = root->left; + rimuoviDaiCompletati(score, root, num_temi); + free(root); + return temp; + } + + // Caso 2: Due figli + struct utente *temp = trovaUtenteMinimo(root->right); // Successore in ordine + strcpy(root->nickname, temp->nickname); // Copio i dati del successore + root->right = eliminaUtente(root->right, nickname, num_temi, score); // Elimino il successore + } + return root; +} + +// Funzione che elimina un utente dal database, prendendo il lock sul mutex degli utenti e chiamando eliminaUtente +void eliminaDaDB(struct utenti *db, char *nickname, int num_temi, struct classifica *score) +{ + pthread_mutex_lock(&db->mutex); + struct utente *root = db->root; + db->root = eliminaUtente(root, nickname, num_temi, score); + db->numUtenti--; + pthread_mutex_unlock(&db->mutex); +} + + + +// Funzione che svuota l'albero binario di ricerca degli utenti +void svuotaDB(struct utente*root){ + if(root==NULL){ + return; + } + svuotaDB(root->left); + svuotaDB(root->right); + free(root->punteggioTemi); + free(root); +} + +// Funzione che svuota il database, prendendo il lock sul mutex +void svuotaDBMutex(struct utenti *db){ + pthread_mutex_lock(&db->mutex); + svuotaDB(db->root); + pthread_mutex_unlock(&db->mutex); + free(db); +} +// Funzione che svuota l'albero binario di ricerca dei punteggi +void svuotaClassificaTema(struct punteggio *root){ + if(root==NULL){ + return; + } + svuotaClassificaTema(root->left); + svuotaClassificaTema(root->right); + free(root); +} + +// Funzione che svuota la classifica, prendendo il lock sul mutex +void svuotaClassifica(struct classifica *score, int num_temi){ + for(int i=0; ivettoreMutex+i); + svuotaClassificaTema(score->vettorePunteggi[i]); + pthread_mutex_unlock(score->vettoreMutex+i); + } + free(score->vettorePunteggi); + free(score->vettorePartecipanti); + free(score->vettoreCompletati); + free(score->vettoreMutex); + free(score); +} \ No newline at end of file diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/database.o b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/database.o new file mode 100644 index 0000000000000000000000000000000000000000..8c5fcb2cba9c764192c34b4beb4abb2901c25f50 GIT binary patch literal 7408 zcmc(kZ)_Y#6~O1tZsU@qz9ywHN)#PcL=#F6J4A(qwz|f?X4}S*1-%xe=FjDFu@C$1 z%-wEe7sn}FLbF{(G7>_iDzpfMN)Zqhsfxr0j!=|T3c-8Z?t>LC?;F;(jPM}m4%SCeYJTBrWe zx%HoE%YE0XF2pVOjguqK`krk?Jjs~7tFO6$lw}&g?JaATg5z z1BG52JQKR^rNIjvRl`fqx&s{=UP{KG5zc1Ax|HnV`ZD`q%2{;N3&x3!9@Mjn(faovxNTU8oUw{CNnQ z&p_DBfXmZv`ik3s85CwL&+770m#yry zy`Xc(&_D-^qtLn?#9pj=F#?lYJvpbGFB+|ojdNR~Uiu1%rh{3t+%}`TD%a`{YXkk@ z3qg~?e#u_lz>=HH4X-mj%_-Pf*-o3nT{>XGZb3B z9co!!NQz~FHZ#h(4RmJa2Qd?&;$i$;(eXodrw_TG-mrEuz3(wXj31a;m>4-JX$XM5 zvH3MkwkI$)S7UpUZA09(u-!HPW0N}IA50&N_@m@cm!3;>JlL%o^Ir|LyHI;8dk@-+ zx*ljR)}IV)(T?ZBs^iLgIMHAlUvr*LXE5xYAFKEKAXBW@$!^B9_SDg4m{YxaOWH9bj{ujQdsB#*h7qOxLd&{ zgOevZ`Nh$vO13)|AtsjQVb1NwI&X3|`nQOq(@@qiT6#zF`PQ5lh{(TQtW5mzW*@?5JUpW(C zA=x3ufZuYA_$|i>i*9;{nNs_Dd-ue*r;j>C+llw|Bz7gb@9S~&XV2u$or&&UI|$=e z2c;bzyyo2k&%Og`6;-N+tPLJ4cbb=qJo7mf8H+_WuUpeG1xvpLI6hcj!=Kdcv9Cva z*WVib9%vZZ1IVE~gFn9f%f9?+_k1v19mro#v@;d(b@*in=9MDV1p?nd}tdAj@g&DJ*PW}1B#RUuTb~p;6rpK z=%bHx&Pbi;gzw`qlINP_Py6!IB!3y->|@)vv=3VV{ea|SP3=p5`!`9RX_9}zm(P;? zK$AS>%iAF+uvqxR{h!ieJxAL}{*IJK|6~-9tx&MbcJ=q0D~KTW$RQzI2lWkt>zD(E z{!QXKZh`%g_*LRMUV-7?d@K3+9_b&##D}8e7vA`%Ir`am ztHw&lEL86z{uXf^tHAFio>*h_b&NuFH}IAEO_Kg^VUNI~V;0`~iKlMUSY^yhrHTKL zxQ?Bn#m&*Bm1O2W8bss%i>>bHeD*5C2Y(_y3Cjy)O`C`6MGSE0pBsY>T^PdThp~?Im!KHmXD6ydZweYY$?}cGLCiLZa-xXZ;yOHu3b>(>P6m# ze*Ru?+3#Njmwvt{xa@Zmof~Ky{|TDc{hk*5Q-Vu7UlCmT`E9|a{hHv?&p!(;?bloI zf3@IiakGGezDPTpTJSh3L&5EdwkZ9b)V~3LjlPeBINz6^4ROBzyb|Jk|9LaS`TjE- z;(Y&Ur~R4z7h1}5L<7K?o{4YuzjNs5|`}IvGskW8kj|DVM{HZoW z4P!Rx6I1EfVBUN_VAx|@+QyXr?+W<-7;!ot;medmp?;Z%`~L(8(B^;Jz6aW(&2D&P z;r`LSEZjf8@qW*BsrURU{eKJ^;n76l3eO+oqfo*A!|l&g`(#KEZjXOI zt+alx;wBB{1sWW#AGYQ8ynZY7jqMik@&M&5^^fl08im{AHXmL)Kxzy(K`3r$azmdA U?+PomPtyNSj%X{vPq_WR0UopI+yDRo literal 0 HcmV?d00001 diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/game.c b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/game.c new file mode 100644 index 00000000..9f632be3 --- /dev/null +++ b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/game.c @@ -0,0 +1,209 @@ +// Modulo server finalizzato alla gestione del gioco di un client +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../include/database.h" +#include "../include/game.h" +#include "../include/common.h" + +// Funzione che registra un utente, controllando che il nickname non sia già presente +// e ritornando un puntatore all'utente registrato +struct utente *registraUtente(int socket, struct utenti *players, int num_temi) +{ + char nickname[TEXTLEN]; + bool ok; + do + { + riceviMsg(nickname, socket, true); // Ricevo il nickname + ok = controllaNickname(nickname, players); // Controllo se il nickname è già presente + inviaMsg(ok ? "1" : "0", socket, true); // Invio il risultato del controllo + } while (!ok); + // Inizialiizzo il nuovo utente + struct utente *new = (struct utente *)malloc(sizeof(struct utente)); + gestisciErroriMalloc(new); + strcpy(new->nickname, nickname); + new->left = NULL; + new->right = NULL; + new->punteggioTemi = (struct punteggioTema *)malloc(num_temi * sizeof(struct punteggioTema)); + gestisciErroriMalloc(new->punteggioTemi); + for (int i = 0; i < num_temi; i++) + { + new->punteggioTemi[i].completato = false; + new->punteggioTemi[i].giocato = false; + new->punteggioTemi[i].punteggio = 0; + } + // Inserisco il nuovo utente nell'albero binario di ricerca + inserisciUtente(players, new); + return new; +} + +// Funzione che invia all'utente i punteggi relativi a un tema, facendo una visita in-order dell'albero binario di ricerca +void inviaPunteggi(struct punteggio *root, int socket) +{ + if (root != NULL) + { + char buffer[TEXTLEN]; + inviaPunteggi(root->left, socket); + sprintf(buffer, "%d", root->punti); + inviaMsg(buffer, socket, true); // Invio il punteggio + sprintf(buffer, "%s", root->giocatore->nickname); + inviaMsg(buffer, socket, true); // Invio il nickname + inviaPunteggi(root->right, socket); + } +} + +// Funzione che invia tutti i punteggi relativi ai temi giocati +void inviaTuttiiPunteggi(struct classifica *score, int socket, int num_temi) +{ + char buffer[TEXTLEN]; + sprintf(buffer, "%d", num_temi); + inviaMsg(buffer, socket, true); // Invio il numero di temi + for (int i = 0; i < num_temi; i++) + { + // prendo il lock sul mutex del tema + pthread_mutex_lock(score->vettoreMutex + i); + sprintf(buffer, "%d", score->vettorePartecipanti[i]); + // invio il numero di partecipanti + inviaMsg(buffer, socket, true); + inviaPunteggi(score->vettorePunteggi[i], socket); + // rilascio il lock + pthread_mutex_unlock(score->vettoreMutex + i); + } +} + +// Funzione che gestisce la scelta del quiz da parte dell'utente, ritornando il quiz scelto +int proponiQuiz(int socket, struct quiz *q, struct utente *player, struct classifica *score, struct utenti *players) +{ + char buffer[TEXTLEN]; + int scelta, num_temi_disp = 0; + // num_temi_disp è il numero di temi non ancora giocati + for (int i = 0; i < q->n_temi; i++) + { + if (!player->punteggioTemi[i].giocato) + num_temi_disp++; + } + // Manteniamo la corrispondenza tra la numerazione dei temi non giocati e quella dei temi + int *corrispondenze = (int *)malloc(num_temi_disp * sizeof(int)); + gestisciErroriMalloc(corrispondenze); + sprintf(buffer, "%d", num_temi_disp); + inviaMsg(buffer, socket, true); // Invio il numero di temi non ancora giocati + if (num_temi_disp == 0) + { // Se non ci sono temi disponibili l'utente viene eliminato e la connessione chiusa + eliminaTuttiPunteggi(score, player, q->n_temi); + eliminaDaDB(players, player->nickname, q->n_temi, score); + close(socket); + return 0; + } + int ultima_corrispondenza = 0; + // Invio i temi non ancora giocati + for (int i = 0; i < q->n_temi; i++) + { + if (player->punteggioTemi[i].giocato) + continue; + strcpy(buffer, q->temi[i].nome); + inviaMsg(buffer, socket, true); + corrispondenze[ultima_corrispondenza] = i; + ultima_corrispondenza++; + } + // Ricevo la scelta dell'utente + riceviMsg(buffer, socket, true); + while (true) + { + if (strcmp(buffer, FINEQUIZ) == 0) + { + eliminaTuttiPunteggi(score, player, q->n_temi); + eliminaDaDB(players, player->nickname, q->n_temi, score); + close(socket); + return 0; + } + if (strcmp(buffer, MOSTRAPUNTEGGIO) == 0) + { + inviaTuttiiPunteggi(score, socket, q->n_temi); + riceviMsg(buffer, socket, true); + continue; + } + scelta = atoi(buffer); + // Controllo lato server che la scelta sia valida + if (scelta < 1 || scelta > num_temi_disp) + { + printf("Scelta non valida\n"); + exit(EXIT_FAILURE); + } + break; + } + + // Aggiorno le strutture dati + scelta = corrispondenze[scelta - 1] + 1; + player->punteggioTemi[scelta - 1].giocato = true; + return scelta; +} + + + +// Funzione che gestisce il quiz, ritornando true se l'utente decide di continuare, false altrimenti +bool gestisciQuiz(int socket, struct quiz *q, int quizScelto, struct utente *player, struct classifica *score, struct utenti *players) +{ + char buffer[TEXTLEN]; + int punteggio = 0; + bool correct; + // Inserisco in classifica l'utente con punteggio 0 + inserisciInClassifica(score, player, punteggio, quizScelto); + for (int i = 0; i < THEMESIZE; i++) + { + strcpy(buffer, q->temi[quizScelto - 1].domande[i].testo); + inviaMsg(buffer, socket, true); // Invio la domanda + riceviMsg(buffer, socket, true); // Ricevo la risposta + if (strcmp(buffer, FINEQUIZ) == 0) + { // Se l'utente decide di uscire dal quiz + eliminaTuttiPunteggi(score, player, q->n_temi); // Elimino tutti i punteggi dell'utente + eliminaDaDB(players, player->nickname, q->n_temi, score); // Elimino l'utente dal database + close(socket); // Chiudo la connessione + return false; + } + if (strcmp(buffer, MOSTRAPUNTEGGIO) == 0) + { // Se l'utente chiede di visualizzare i punteggi + inviaTuttiiPunteggi(score, socket, q->n_temi); // Invio i punteggi + i--; // Decremento i in modo che la prossima iterazione mostri la domanda corrente + } + else + { + correct = rispostaCorretta(&q->temi[quizScelto - 1].domande[i], buffer); // Controllo se la risposta è corretta + inviaMsg(correct ? "1" : "0", socket, true); // Invio il risultato + if (correct) + { // Se la risposta è corretta, aggiorno coerentemente le strutture dati + eliminaDaClassifica(score, player->nickname, punteggio, quizScelto); + punteggio++; + player->punteggioTemi[quizScelto - 1].punteggio = punteggio; + inserisciInClassifica(score, player, punteggio, quizScelto); + } + } + } + // Se l'utente ha completato il quiz, aggiorno le strutture dati + player->punteggioTemi[quizScelto - 1].completato = true; + score->vettoreCompletati[quizScelto - 1]++; + return true; +} + +void *partita(void *game) +{ + int quizScelto; + struct utente *player; + // recupero i dati passati al thread + int client_socket = ((struct game *)game)->socket; + struct utenti *players = ((struct game *)game)->players; + struct classifica *score = ((struct game *)game)->classifica; + struct quiz *q = ((struct game *)game)->q; + int num_temi = q->n_temi; + // Registro l'utente + player = registraUtente(client_socket, players, num_temi); + // Finché l'utente decide di continuare il quiz e ci sono temi disponibili, propongo un quiz e gestisco le risposte + while ((quizScelto = proponiQuiz(client_socket, q, player, score, players)) && gestisciQuiz(client_socket, q, quizScelto, player, score, players)) + ; + pthread_exit(NULL); +} \ No newline at end of file diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/game.o b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/game.o new file mode 100644 index 0000000000000000000000000000000000000000..8407cae212eb9943f6cf0c72766bd2ec358baa0c GIT binary patch literal 7816 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 +#include +#include +#include +#include +#include +#include + +#include "../include/quiz.h" +#include "../include/common.h" +#include "../include/params.h" + +// Funzione di utilità utilizzata nel parsing +// Legge un file, inserendo il contenuto in un buffer, fino a un carattere terminatore +// Prende in input il buffer, il file descriptor, la posizione di partenza, il carattere terminatore e un puntatore a intero +// Ritorna la lunghezza del buffer +// Supporta due modalità: se il puntatore a intero è NULL, legge fino al carattere terminatore +// Se il puntatore a intero è diverso da NULL, legge fino al carattere terminatore o al carattere '\n' e ritorna, +// tramite il puntatore a intero, 1 se il primo carattere è il terminatore, 0 altrimenti +int readUntil(char *buffer, int fd, int start, char terminator, bool *cause) +{ + char *pointer = buffer; + lseek(fd, start, SEEK_SET); // sposta il cursore alla posizione start + while (read(fd, pointer, 1) > 0 && *(pointer) != terminator && (*pointer != '\n' || cause == NULL)) + pointer++; + if (cause != NULL) + *cause = *(pointer) == terminator ? 1 : 0; + *(pointer) = '\0'; + return pointer - buffer + 1 + start; +} + +// Funzione di utilità per convertire una stringa in minuscolo +// Utilizzata per confrontare le risposte +void toLowerCase(char *str) +{ + while (*str) + { + *str = tolower((unsigned char)*str); + str++; + } +} + +// Funzione per visualizzare la lista dei temi +void listaTemi(struct quiz *q) +{ + intro(); + printf("Temi:\n"); + for (int i = 0; i < q->n_temi; i++) + printf("%d - %s\n", i + 1, q->temi[i].nome); + printplus(); + printf("\n\n"); +} + +// Funzione per verificare se una risposta è corretta +bool rispostaCorretta(struct domanda *d, char *risposta) +{ + struct risposta *r; + toLowerCase(risposta); + r = &d->risposte; + while (r != NULL) + { // scorro la lista di risposte + if (strcmp(r->testo, risposta) == 0) + return true; + r = r->next; + } + return false; +} + +// Funzione per il parsing dei quiz +// Note sul formato dei quiz: +// - Ogni tema è contenuto in un file .quiz +// - Il file indice.quiz contiene il numero di temi e il nome di ciascun tema +// - Ogni domanda termina con un carattere '|' +// - Le risposte sono separate da caratteri '~' +void parse(struct quiz *q) +{ + int indice; + char buffer[TEXTLEN]; + int indexcursor = 0, numtemi; + // mi posiziono nella cartella quiz + if (chdir("quiz") != 0) + { + perror("Si è verificato un errore durante il cambio di directory"); + exit(EXIT_FAILURE); + } + // apro il file indice + indice = open("indice.quiz", O_RDONLY); + if (indice == -1) + { + perror("Si è verificato un errore durante l'apertura del file indice.quiz"); + exit(EXIT_FAILURE); + } + // leggo la prima riga del file indice, che contiene il numero di temi + indexcursor = readUntil(buffer, indice, indexcursor, '\n', NULL); + numtemi = atoi(buffer); + // istanzio le necessarie strutture dati + q->n_temi = numtemi; + q->temi = (struct tema *)malloc(numtemi * sizeof(struct tema)); + gestisciErroriMalloc(q->temi); + for (int i = 0; i < numtemi; i++) + { // per ogni tema + char stringa_file_tema[QUIZFILENAMELEN]; + int file_tema; + sprintf(stringa_file_tema, "%d.quiz", i + 1); // ricavo il nome del file tema + file_tema = open(stringa_file_tema, O_RDONLY); + if (file_tema == -1) + { + perror("Si è verificato un errore durante l'apertura dei file di quiz"); + exit(EXIT_FAILURE); + } + int themecursor = 0; + struct tema t; + indexcursor = readUntil(buffer, indice, indexcursor, '\n', NULL); // leggo il nome del tema dal file indice + strcpy(t.nome, buffer); + for (int j = 0; j < THEMESIZE; j++) + { // per ogni domanda + themecursor = readUntil(buffer, file_tema, themecursor, '|', NULL); // leggo il testo della domanda + struct domanda d; + struct risposta *r; + bool cause = 1; + strcpy(d.testo, buffer); + r = &d.risposte; + while (cause) + { // Scorro le risposte + themecursor = readUntil(buffer, file_tema, themecursor, '~', &cause); + strcpy(r->testo, buffer); + if (cause) + { + r->next = (struct risposta *)malloc(sizeof(struct risposta)); + gestisciErroriMalloc(r->next); + r = r->next; + } + else + { + r->next = NULL; + } + } + t.domande[j] = d; + } + q->temi[i] = t; + close(file_tema); + } + close(indice); +} +// Funzione per eliminare un quiz +void eliminazioneQuiz(struct quiz *q) +{ + for (int i = 0; i < q->n_temi; i++) + { + struct tema t = q->temi[i]; + for (int j = 0; j < THEMESIZE; j++) + { + struct domanda d = t.domande[j]; + struct risposta *r = &d.risposte; + bool primaRisposta = true; + while (r != NULL) + { + struct risposta *temp = r; + r = r->next; + if (!primaRisposta) + free(temp); + primaRisposta = false; + } + } + } + free(q->temi); +} diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/quiz.o b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/modules/quiz.o new file mode 100644 index 0000000000000000000000000000000000000000..09956000bc4dc0321847637f15d3fcf16eedc228 GIT binary patch literal 5712 zcmbtXZEPIH8J@HAVbUaL0&St8Xr(G`Q0h}0(GLQmrq+@v3dp5c zBo6tiE{n2kTwP02;cm89T z2Osjv$6I-Da5gAk4Tfie%R2+Jam;+5hvqB~%!SaL;pxkvdG#W6dGJn9pT%r$C9jwZ z2_8O7B3CcMbBoFS+Mzqi!b0*q`=r< zVmEwpCFWcjshf*f&TS`KvpgK?3C%@*iaWKWqp+1h5i?MKR|3XuZJ0VdB51MEqKL^#$aAZezqfqQoi3 z3#|OM@UQLuhaaC_4|`MNH($5QR*hOzweY z$%WLk|1`a6zsmG!D78$JzCh%W^iL7{+HYWHauS+te0?Xl{K}zEIHKf3S2=2VNS+rV z9Ibi$^&W~ox}TzOLLsP%<1N)gdDx?-q>L(5xR|5v6ZxtOVN|f`BP*I=6LL^+gp6s}IxSrVG|pQm?XZU;q%H4pp?804y1Uht@t5UyNL(2+@! zh>(;?iVQJcnSv-Qzf=)nQpFHFRm`O7SA6W5I=09HHEpp@9{(_^W|W#%kLZy2$LyT5 zoo&h(ea5EJ8n%W#Rd)7MV!r1XZ=Nys*se3?q%E&tl=Ft|x&_xZGG*7wd$!?ZjkJ{; zbqYqtp+DD7dj)rbIr)r}wo{+pPWCHS(RMwuYGmxJG3I2+wq|5gMj88baV@jwMD{4c zD4-pKgWHYG!=vTAS2p_lQ+KDf_Vt&=vj5PwZK2TgbI3Cc;c$w>apXnN0x2o#}l8AWs0VnzvUW&g* zu!Zguz=@v2OYys&ZR#HYPP7}ZCV#Za{~2(ij}WZlcYn|gfjbC#4NRg5inqltCZY%g z>k}`Cu3$IBEsQg}+kVL*SK>2enK-3@ZP4UJjszCvdzmmTZlecvh|?DdfE}eTa!J@- z^t6-jm-6#8f<$gIOK0gc~L{c z@*U*84*1g@@FN{?zXSek2mHq!@LzSn(RADG_gn}3)eiXEgd;y!?0t^M3Pn55sE;}QEj=+*|FeZ!@Cs;aLAY&sV zK*M#vFKIaTrtJSt!#}Ix*ERfe8h*3-#;X;rf0rXt=)LD;j>g7SCD;5n<5fw`sU8U)FG4{)C3>^1s$_J)aE? z*Yo*P+2_Fi0zE2kuXVuR)$om){GV|7iC_o6oyyMFa7l>b_(K}5+cAVR!}pMQmxB-{XU+K;p%s=7Qs_0VpcD)JGfhBu4K$HxvP(9waWIL{8=;FH55nC8eVHEM@)`gVRE_yn zc-;S2i2*U-;jcTRElzp>*Ex*tN&&ESP@mDLDc^ynk#)( z|8~Biat6Xg4H+1Iqv0p653zXd31a)8K=kKmXujk5LzwOKA4gLs@}i;nj_dy$L^s?i literal 0 HcmV?d00001 diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/1.quiz b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/1.quiz new file mode 100644 index 00000000..f9d79a51 --- /dev/null +++ b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/1.quiz @@ -0,0 +1,5 @@ +Chi ha scritto la "Divina Commedia"?|dante alighieri~dante +Qual è il titolo dell'opera di Giovanni Boccaccio che racconta storie di dieci giovani durante la peste nera?|decameron~il decameron~il decamerone~decamerone +Quale poeta è noto per il suo "Canzoniere", una raccolta di poesie dedicate a Laura?|francesco petrarca~petrarca +In quale città è ambientata la maggior parte delle novelle del "Decameron"?|firenze +Chi è l'autore del "De vulgari eloquentia"?|dante alighieri~dante diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/2.quiz b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/2.quiz new file mode 100644 index 00000000..e8b0b358 --- /dev/null +++ b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/2.quiz @@ -0,0 +1,5 @@ +In che anno è scoppiata la Prima Guerra Mondiale?|1914 +Chi era il leader dell'Unione Sovietica durante la Seconda Guerra Mondiale?|joseph stalin~stalin~iosif stalin +In che anno furono promulgate le leggi razziali in Italia?|1938 +In che anno è caduto il Muro di Berlino?|1989 +Chi è stato il primo presidente nero degli Stati Uniti?|barack obama~obama diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/3.quiz b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/3.quiz new file mode 100644 index 00000000..8588c448 --- /dev/null +++ b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/3.quiz @@ -0,0 +1,5 @@ +Chi ha scritto "Critica della ragion pura"?|immanuel kant~kant +Quale filosofo è noto per la frase "Penso, dunque sono"?|rené descartes~cartesio~rene descartes~ descartes +Chi è l'autore del "Tractatus Logico-Philosophicus"?|ludwig wittgenstein~wittgenstein +Quale filosofo ha sviluppato il concetto di "volontà di potenza"?|friedrich nietzsche~nietzsche +Chi ha scritto "Essere e tempo"?|martin heidegger~heidegger diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/4.quiz b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/4.quiz new file mode 100644 index 00000000..b1c549d5 --- /dev/null +++ b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/4.quiz @@ -0,0 +1,5 @@ +Chi ha sconfitto Annibale nella battaglia di Zama?|scipione l'africano~scipione +Quale riformatore romano è noto per le sue leggi agrarie e la sua morte violenta?|tiberio gracchi~tiberio gracchus~tiberio gracco +In che anno è stata fondata la Repubblica Romana?|509 a.c.~509 +Chi era il primo re di Roma secondo la leggenda?|romolo +Quale generale romano ha attraversato il Rubicone, scatenando una guerra civile?|gaio giulio cesare~giulio cesare~cesare diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/5.quiz b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/5.quiz new file mode 100644 index 00000000..f094718c --- /dev/null +++ b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/5.quiz @@ -0,0 +1,5 @@ +Chi ha dipinto "La vocazione di San Matteo"?|caravaggio +Quale architetto ha progettato la piazza di San Pietro a Roma?|gian lorenzo bernini~bernini +Chi ha scolpito "L'Estasi di Santa Teresa"?|gian lorenzo bernini~bernini +Quale pittore barocco è noto per le sue opere drammatiche e l'uso del chiaroscuro?|caravaggio +Chi ha dipinto "Le tre grazie"?|peter paul rubens~rubens~pieter paul rubens diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/6.quiz b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/6.quiz new file mode 100644 index 00000000..5ba010c4 --- /dev/null +++ b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/6.quiz @@ -0,0 +1,5 @@ +Quale organizzazione internazionale è stata fondata nel 1945 per promuovere la pace e la sicurezza globale?|onu~organizzazione delle nazioni unite +Chi è stato il primo segretario generale delle Nazioni Unite?|trygve lie +Quale trattato ha posto fine alla Prima Guerra Mondiale?|trattato di versailles~versailles~di versailles +Quale paese ha lasciato l'Unione Europea nel 2020?|regno unito~uk +Quale accordo internazionale del 2015 mira a limitare il riscaldamento globale a meno di 2 gradi Celsius rispetto ai livelli preindustriali?|accordo di parigi~di parigi diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/indice.quiz b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/indice.quiz new file mode 100644 index 00000000..c864dc7a --- /dev/null +++ b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/quiz/indice.quiz @@ -0,0 +1,7 @@ +6 +Letteratura italiana del Medioevo +Storia del Novecento +Filosofia moderna +Roma Repubblicana +Arte Barocca +Politica Internazionale diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/readme.md b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/readme.md new file mode 100644 index 00000000..86da94ef --- /dev/null +++ b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/readme.md @@ -0,0 +1,18 @@ +# Progetto di Reti Informatiche - Giulio Zingrillo - Voto finale 29 +Ho presentato il progetto al primo appello della sessione invernale. +La prof. Righetti è stata molto scrupolosa, aveva letto attentamente il codice e lo aveva sottoposto a molti test. +Nel mio caso aveva trovato due errori, che sono stati corretti nella versione caricata qui e che riporto di seguito: +- Il primo, più serio, riguardava l'invio della lunghezza del messaggio, che, nella fretta, avevo gestito male: infatti io non facevo né la conversione del valore tra host e network, né utilizzavo i tipi "certificati" uint; +- Il secondo riguardava la gestione dell'input utente per le risposte al quiz: avevo gestito il caso in cui l'utente inseriva più caratteri della lunghezza del buffer, ma non quello in cui si limitava a premere invio senza aver scritto nulla. + +La professoressa è stata comunque molto comprensiva: mi ha chiesto, in sede di orale, come avrei corretto gli errori e mi ha fatto modificare il codice. + +I principali punti di forza del progetto, che sono giustificati sinteticamente nella documentazione, sono l'impiego degli alberi binari di ricerca - che garantiscono ottime prestazioni nell'inserimento, eliminazione e stampa ordinata di nodi -, e dei thread, che abbattono l'overhead dovuto ai cambi di contesto. +Un thread, in particolare, è dedicato alla gestione del pannello di controllo, che si aggiorna ogni 3 secondi (ma il parametro è configurabile) e termina automaticamente se l'utente preme q e dà invio. Per capire quando il socket è stato chiuso in fase di invio del messaggio (e, quindi, lato client) ho gestito il segnale SIGPIPE. +Inoltre, ho implementato un formato .quiz basato su caratteri delimitatori e un file di indice. Il parsing dei quiz, effettuato all'avvio del server, è improntato alla flessibilità: aggiungendo file nella cartella quiz e modificando l'indice si possono aggiungere domande e risposte. + +In merito alle scelte di rete, ho inserito nella documentazione un diagramma del progetto come macchina a stati per dimostrare che, sotto opportune condizioni, definire un tipo di messaggio era superfluo: in ogni momento client e server sapevano a priori quale messaggio aspettarsi. + +Eventuali ampliamenti del progetto, che non sono riuscito a implementare per mancanza di tempo, sono l'aggiunta di scambi di messaggi tramite protocolli binari (ad esempio, l'invio della classifica o dei temi) e la gestione della terminazione con Ctrl-C lato client e lato server. + +Il mio consiglio, comunque, è di prestare sempre un occhio al tempo nella realizzazione del progetto: fare un progetto che funziona è fondamentale per accedere all'esame, e farlo bene dà una certa soddisfazione personale, ma dal momento che questa parte è valutata solo 4 punti è opportuno non distrarsi troppo dalla preparazione dell'orale, che ha invece un peso molto maggiore. \ No newline at end of file diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/server b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/server new file mode 100644 index 0000000000000000000000000000000000000000..ab83076b48207afae92bf510b5d3c0e9ac966916 GIT binary patch literal 31968 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "include/game.h" +#include "include/database.h" +#include "include/params.h" +#include "include/common.h" + +// gestisco il segnale SIGPIPE evitando il comportamento di default +void handle_sigpipe(int sig) {} +// fai notare la modularità dei quiz +// fai notare che hai definito un tuo formato per i quiz +// fai notare lo standard c89 +// fai notare gli alberi binari come strutture dati +// fai notare la gestione dei segnali +// fai notare la gestione dei thread +// il terminatore di stringa non viaggia sulla rete +// parla dei vari moduli del codice +// parla del formato dei quiz che lascia flessibilità nei testi e permette risposte multiple + +int main() +{ + int server_socket, client_socket, ret, n_temi, flags; + struct sockaddr_in server_address; + struct datiPdC *dati; + struct classifica *score; + struct utenti *players; + pthread_t *thread; + struct quiz q; + signal(SIGPIPE, handle_sigpipe); + // effettuo il parsing dei dati dei quiz + parse(&q); + // inizializzo la lista degli utenti + players = (struct utenti *)malloc(sizeof(struct utenti)); + gestisciErroriMalloc(players); + players->root = NULL; + pthread_mutex_init(&players->mutex, NULL); + players->numUtenti = 0; + // inizializzo la classifica + n_temi = q.n_temi; + score = (struct classifica *)malloc(sizeof(struct classifica)); + gestisciErroriMalloc(score); + score->vettorePunteggi = malloc(n_temi * sizeof(struct punteggio)); + gestisciErroriMalloc(score->vettorePunteggi); + score->vettoreMutex = malloc(n_temi * sizeof(pthread_mutex_t)); + gestisciErroriMalloc(score->vettoreMutex); + score->vettorePartecipanti = malloc(n_temi * sizeof(int)); + gestisciErroriMalloc(score->vettorePartecipanti); + score->vettoreCompletati = malloc(n_temi * sizeof(int)); + gestisciErroriMalloc(score->vettoreCompletati); + for (int i = 0; i < n_temi; i++) + { + pthread_mutex_init(score->vettoreMutex + i * sizeof(pthread_mutex_t), NULL); + score->vettorePartecipanti[i] = 0; + score->vettorePunteggi[i] = NULL; + score->vettoreCompletati[i] = 0; + } + // inizializzo la struttura con i dati da passare al thread che gestisce il pannello di controllo + dati = (struct datiPdC *)malloc(sizeof(struct datiPdC)); + gestisciErroriMalloc(dati); + dati->players = players; + dati->score = score; + dati->q = &q; + // configuro stdin per la modalità non bloccante + flags = fcntl(STDIN_FILENO, F_GETFL, 0); + fcntl(STDIN_FILENO, F_SETFL, flags | O_NONBLOCK); + // creo un thread per il pannello di controllo + thread = (pthread_t *)malloc(sizeof(pthread_t)); + gestisciErroriMalloc(thread); + ret = pthread_create(thread, NULL, pannelloDiControllo, (void *)dati); + if (ret) + { + perror("Errore durante la creazione del thread che gestisce il pannello di controllo"); + exit(EXIT_FAILURE); + } + + // inizializzo il socket + server_socket = socket(AF_INET, SOCK_STREAM, 0); + if (server_socket == -1) + { + perror("Errore durante la creazione del socket"); + exit(EXIT_FAILURE); + } + // inizializzo la struttura per il server + server_address.sin_family = AF_INET; + server_address.sin_port = htons(PORT); + inet_pton(AF_INET, SERVER_IP, &server_address.sin_addr); + // effettuo il binding del socket + ret = bind(server_socket, (struct sockaddr *)&server_address, sizeof(server_address)); + if (ret == -1) + { + perror("Errore durante il binding del socket"); + exit(EXIT_FAILURE); + } + ret = listen(server_socket, BACKLOG); + if (ret == -1) + { + perror("Errore durante la listen del socket"); + exit(EXIT_FAILURE); + } + // accetto connessioni + while (1) + { + struct sockaddr_in client_address; + socklen_t client_address_len = sizeof(client_address); + client_socket = accept(server_socket, (struct sockaddr *)&client_address, &client_address_len); + if (client_socket == -1) + { + perror("Errore durante la connessione con il client"); + exit(EXIT_FAILURE); + } + + // crea un nuovo thread per ogni client + pthread_t *thread = (pthread_t *)malloc(sizeof(pthread_t)); + gestisciErroriMalloc(thread); + // inizializzo la struct game con i dati da passare al thread + struct game *g = (struct game *)malloc(sizeof(struct game)); + gestisciErroriMalloc(g); + g->q = &q; + g->players = players; + g->classifica = score; + g->socket = client_socket; + ret = pthread_create(thread, NULL, partita, (void *)g); + if (ret) + { + perror("Errore durante la creazione di un nuovo thread"); + exit(EXIT_FAILURE); + } + } + + return 0; +} diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/server.o b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/server.o new file mode 100644 index 0000000000000000000000000000000000000000..d94f41b191b30f48e795303ebec078e5e9b093a1 GIT binary patch literal 4960 zcmbtXU1%It6uz6JZLDn*YqcqrG62@>(Ttlw9xTKs10wW6CHNGICTW$X4`QPTz9{5HQ0R+44@FAj`R?4iIhkgn=n1p; z-tV0A-E+^m_s--Ev$MS>786=x;#sjW(x?zi4J-YG>?XuEu~q!hu;;I&<^Svt-kEs$ zOFgpQyfr~aJyxY|?>_2SzInT4-WuNkPs_hPx0TvoH!vvR=n3yEex6?5Jnd2M-ldCs6wFo$nWlG~(at4O^yX)cgzpkdhG0~(|Y?>O4t(ey<^LnjX-&}>2Xw>ElBLlQZ ztoYYS`U%*qriz5ERpE~B7=c|7`9>>tBb+k}lL&&w-&&Q2z_%(pzBxQJI4rzf z)y=E+Dh`R9IS2{Exf+f6=IGGi=yEyQt9QX%tPyiF_bZlO-~7%RHy5p;`8sTpm7`K6 zwZ@-YteB%$8fg~G|3>Z4Ai(veBA?kEmd+&gBegX0%53WuZ}jQei8|`lFA%An{6a%*Sa+i-G5A?><$E|)iY z93zu=y<(mQl;eNoE9En1ZBMkc9*H;8UkiL7p*U!YZpZC$+&&qF^19cK;>|fF&vrv* zVLq%YPa&5|a%I%VDl$38cD=RcU!4cXD7%JR&Y#Pxd}RN1zYr|9aqr6P3J@*T`U2i zJ0K&}HQ~q;?K~HNh2S1Z^_M++AmzA@CweokmlLUu&XdQFb*4_Xx4&SXPMtn>ywgk( zVQ{^iaN4Sui>AQ+)N{PF z5Qk{J5WHP*Z0^uC3DIW>*hYq1)Q14yM31&V1&{EzMbKm{|v*qeVO6hewN`p4@XfD z6%XgJ7|wZy8BX64)qH*!fq%kq&i@6&IsZ+C?ierC`44>O$epJ4cQ^4Ig83GtUCyAXZM{y}Cx z$Z)*FG|za5XISxEV)i`F4;aql{FLGNI@SF08<@sA54blW*O@)%Ut~Dv|DE9vlfUM# zLE=d?|M$UAY*siL&cB158)xDyfOULQG;E8xo znl9&fcc~=e#e6WxyZ9eYmhfmgm(d#gc`_ywwOYtvx@Ad9#WX7B0=Xiib#@BpH#TJ;ES3=@J}M-F?xWj zZ3;-rT~!x7)@^wHCrAO#|LTtqba3(-(=hmurRGRzLLI-fp`Rz|fl0FlRC`1v6!CG< zbh-w)XH~f~={0SA<7Q!%3*dLtX+7l!Uwf}y=fJr!ic=xR3pH=Y(|2?e` Hg#G^p)h20z literal 0 HcmV?d00001 diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/start.sh b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/start.sh new file mode 100644 index 00000000..5e69a68e --- /dev/null +++ b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/Progetti studenti/A.A.24-25 - Zingrillo/start.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# Controllo la presenza di gcc +if ! command -v gcc &> /dev/null +then + echo "Errore: gcc non è installato." + exit 1 +fi + +# Controllo la presenza di make +if ! command -v make &> /dev/null +then + echo "Errore: make non è installato." + exit 1 +fi + +# Lancio il comando make +make + +# Controllo se il comando make è andato a buon fine +if [ $? -ne 0 ]; then + echo "Errore: il comando make è fallito." + exit 1 +fi + +# Apro due nuove finestre del terminale e lancio ./client 3000 +gnome-terminal -- bash -c "./client 3000; exec bash" +gnome-terminal -- bash -c "./client 3000; exec bash" + +# Lancio il comando ./server nella scheda corrente +./server \ No newline at end of file diff --git a/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/progetto2024-2025.pdf b/TERZO ANNO/I SEMESTRE/Reti Informatiche/Progetti/progetto2024-2025.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8318d1bed7331dd3d92d68e03d699003ffb8cdab GIT binary patch literal 194759 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

nXh5tq=3S94_RMa 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 literal 0 HcmV?d00001