L'obiettivo è quello di sviluppare qualcosa di simile con un'applicazione quiz: c'è un server a cui i giocatori si connettono. Ad un certo punto, viene avviata una partita. Il gioco consiste nel chiedere ai giocatori alcune domande a risposta multipla e determinare il vincitore sulla base di alcuni criteri.
Il server genera un nuovo thread per ogni client (so che potrebbe essere migliore e più facile da usare select, ma il punto è capire / imparare il multithreading). Gli utenti sono "in attesa" fino a quando un numero sufficiente di utenti è disponibile in modo che il gioco possa iniziare.
Il problema è cosa succede quando inizia il gioco? Il mio attuale miglior approccio è quello di utilizzare molti dati condivisi che sono costantemente raggruppati da tutti i thread e generare un thread di controller di gioco che controlla il gioco.
Più specificamente, avrei una struttura dati Player che ha qualche flag inGame. Quando sono disponibili giocatori sufficienti, il giocatore che lo nota inizia il thread di controllo del gioco e passa i giocatori disponibili ad esso. Il thread di controllo del gioco segna tutti i giocatori disponibili come "in gioco" e assegna loro una domanda. Dopo un po 'di tempo, cerca una risposta. Nel frattempo, i giocatori controllano costantemente gli aggiornamenti dal thread di controllo del gioco.
Ritengo che questo approccio basato sui dati condivisi non sia il migliore. Hai qualche suggerimento su come posso migliorare l'architettura della mia applicazione?