Al di là che "ti possa funzionare o meno", la cosa che mi sembra interessante è il fatto che tu possa mandare un messaggio/pacchetto e lui manda a tutti la stessa info.
Dovrei leggere meglio ma non vedo grande differenza tra il fatto che il server invii la stessa info a tutti i client connessi (websocket); a meno che non siano i client stessi a poterlo fare, senza passare per il server ma, se così fosse, non avrei controllo e non varrebbe la pena (a meno che io non effettui controlli nella parte client, che è sempre a rischio hackeraggio).
Luca (ma non eri Massimo?
)
Magari; in realtà sto proprio al Minimo, anzi, in riserva. In effetti 'sto stupido nick che scelsi da 1 a 10 mi piace -100. Magari aggiungo un AKA Mario nell'avatar.
Hai ragione sulla velocità di trasmissione ma, nell'esempio fatto, tempo da un fotogramma all'altro, ora non so se siano 20 o 25 fotogrammi al secondo ma anche considerandone 20 sarebbero 1/20 sec = 5 centesimi di secondo e non penso sia un tempo sufficiente per informare il server (giocatore1 punta x), che questi "elabori" il dato (perlomeno lo salvi da qualche parte, anche in memoria) e lo invii a N client.
Ammesso che per il server quei 5 c. fossero sufficienti (considerando anche che contemporaneamente si spera ci siano molte stanze attive contemporaneamente), il problema principale che devo affrontare (meglio l'unico giorno al mese in cui mi sento mentalmente lucido
) è:
Mettiamo che io conservi un elenco dei comandi che il server invia, ad esempio:
(STAVO nuovamente studiando, quindi avevo buttato giù qualcosa)
Type tCmd(ID as Int, Sender As Int, Verb As String, Object As Map, Recipient As Map)
in cui:
ID = ID del comando, una sorta di ID con auto incremento come nei DB;
Sender = ID del player che invia il comando;
Verb = il comando vero e proprio - una costante tipo Punta, Gioca, Scarta, Regala, etc.
Object = l'oggetto dell'azione - carta, gadget, messaggio di testo, ...
Recipient (o Receiver) - ID del player (o dei player) interessati, riceventi.
Quindi, dicevo, se il server mantenesse una lista di questi comandi, malgrado si supponga che ogni client riceva ed interpreti/esegua ogni singolo comando subito, senza ritardi e tantomeno disconnessioni, il problema è proprio quando un client si trovi in una di queste condizioni, disconnessione-riconnessione o, peggio, rallentamento.
Esempio:
1° comando - Player1 riceve il turno - info a tutti gli altri e inizio countdown
2° comando - Player1 punta - sempre info a tutti, da adesso lo ometto in quanto sottinteso
3* comando - passaggio turno a Player 2
4° comando - Player2 punta
etc fino a player4, diciamo.
Mettiamo che Player3 abbia un rallentamento nella propria connessione. Ad un certo punto riceverà tutta insieme la lista comandi e
dovrebbe eseguirli. Uno di questi comandi, in mezzo agli altri, potrebbe essere la ricezione del turno. Avendo ricevuto il tutto in ritardo, il server potrebbe non aver ricevuto la puntata o giocata del Player3 ed aver eseguito un'azione di conseguenza, come farlo passare, ad esempio, o giocare una carta in sua vece. Ma il client del player "ritardatario", ricevuto il comando "turno a te", manderà in esecuzione l'animazione countdown ed il player tenterà di eseguire la propria mossa, già rimpiazzata invece dal server (come dicevo, avrà già considerato il player come "passato" oppure avrà effettuato un'azione sostitutiva per il player stesso).
Spiegato malissimo, confido nella vostra intelligenza (e soprattutto pazienza
).
P.S. almeno tutto quanto ho appena scritto farà passare del tempo a
@Star-Dust, che si annoia, visto il suo commento circa il mortorio
P.P.S. Ho scrito a rate questo post, facendo contemporanemente diverse altre cose, per cui risulta confuso e manca una cosa: in caso di disconnessione-riconnession, anziché rallentamento (lag), il client dovrebbe ricevere lo stato, la situazione corrente, non una lista di comandi e questo dovrebbe potersi fare senza grosse difficoltà (tranne il fatto che la partita potrebbe essere terminata e perfino la stanza elimiinata).
[in effetti la lista comandi non sarà necessaria sul server ma solo sul client]