Si tratta del classico client-server circoscritto alla lan locale
Sì, ma tramite wifi!
Non so che dirti, in questo momento ho le idee più confuse del solito. Anche perché molto dipende ANCHE dalla situazione attuale:
L'alternativa era tradurre il sw esistente per Mysql
Ricordo vagamente un post proprio nel forum italiano in cui qualcuno voleva utilizzare uno degli esempi web server ma in locale; non so se abbia risolto.
Ci sarebbe anche RDC, ma sempre su Internet finisce; se questo non fosse un problema, ovvero tutti i dispositivi in gioco potessero connettersi, potresti limitare l'accesso ai soli utenti locali, ovviamente.
A te come procede? Hai deciso che tipo di oggetti creare?
"Deciso" è una parola grossa! Probabilmente la più difficile nel mio vocabolario
Per il momento, proprio oggi, malgrado le mille interruzioni, ho preso l'ultima versione preparata (che era ad un passo dal consentirmi di dedicarmi esclusivamente al gioco vero e proprio) che non mi piaceva affatto - più avanti provo a spiegare - ed ho PEDESTREMENTE modificato con i comandi Sostituisci un bel po' d'istruzioni; ora devo andare a vedere cosa sia successo
.
E' complicato spiegarlo e se uno non è davvero interessato, è impossibile capirlo.
Però può essere utile a capire, in minimissima parte, come funziona un websocket server B4J.
In un websocket server scritto con B4J, esistono classi "speciali" che ricevono, da dietro le quinte (cioè dall'ambiente B4J) un oggetto websocket per le comunicazioni.
Queste classi, quindi, chiamate "websocket handler", sono le uniche che comunicano col client.
Anche seguendo gli esempi, decisi che una "websocket handler class" dovesse rappresentare un giocatore e iniziai a scrivere codice con questa idea.
Poi, l'idea genialie (auto-ironico
): dato che la OOP è sempre la soluzione ideale, avrei dovuto creare come minimo queste classi:
wshUser - la classe websocket handler che rappresenta l'utente - la comunicazione col client.
clsPlayer - giocatore
clsChatter - chiacchieratore
clsBot - giocatore fasullo
clsGameRoom - stanza da gioco
clsChatRoom - stanza da chat
Quindi un oggetto Player (clsPlayer) avrebbe posseduto un oggetto wshUser tramite il quale comunicare.
Stessa cosa l'oggetto Chatter.
Il bot avrebbe dovuto essere una sotto-classe di Player oppure avrei dovuto usare dei flag per modificare il comportamento a seconda del tipo di giocatore (Player o Bot) nella medesima classe.
Fatto tutto questo, iniziato lo sviluppo, mi sono reso conto della grande str...ta fatta: molto codice veniva inutilmente duplicato (col rischio quindi di errori, bug e confusione) perché wshUser riceveva-trasmetteva comandi tra client e server ma poi doveva passarli pari-pari al clsPlayer, che a sua volta magari inviava comandi alla GameRoom e, viceversa, un comando GameRoom diretto al Player poi doveva, tramite questo, passare al wshUser. Figuriamoci poi eventuali eventi!
Ora torno all'idea iniziale, ma dovendo provarci modificando la seconda, perché sicuramente contiene codice scritto successivamente e necessario.
Insomma, come ho già scritto, state pronti... ma a chiamare per me psichiatri di grido
Bene, ho scritto tutto questo e la tua era una domanda, come si dice... non mi viene; insomma, tipo: "E tu come stai?"
(di cortesia? Boh, non mi viene il termine giusto, me devi aiuta' tu, in questo... HHHUUUHHH)
P.S. tanto per dire quanto il tutto sia semplice, dimenticavo di citare alcune altre cosette:
1) per rendere più veloce il server (speranza) penso si debba sfruttare il fatto che le routine di una classe websocket handler girino nel proprio thread appositamente (e automaticamente) creato; per questo, i comandi CallSubDelayed funzionano anche in maniera differente rispetto a B4A;
2) cosa-come-quando-dove salvare dati su DB? Cosa durante una partita? Cosa in altri momenti?
3) creare un interprete di comandi per la comunicazione client-server (che chiami routine con parametri)?
4) salvare l'andamento delle partite su DB? Durante una partita, dovrei dare la possibilità ad un giocatore NON di turno, di fare altre cose... se tra queste egli fa qualcosa di scorretto, come scrivere nella chat nella stanza (sempre se la metto) parolacce e qualcuno lo segnala (da implementare) poi dovrei andare a verificare
5) creare classi speciali per contenere "dati" da inviare?
6) creare classi "contenenti" regole del gioco "specifico"? (da ricordare che vorrei che il tutto potesse in futuro servire per altri giochi simili);
7) creare classi di "verifica azione utente"?
8) creare un utente speciale che possa entrare "invisibile" nelle varie stanze? (per "amministrare")
9) se non ricompro occhiali da "preside", oltre a diventare cieco, il naso mi finirà in bocca, dato che lo uso per "diminuire la gradazione da miope"
11) non ho un accendino funzionante, quindi devo alzarmi ogni volta ed andare ad accendere la sigaretta in cucina)
ORMAI HO SBROCCATO: SE VEDE?
Non so nemmeno in quale thread sto scrivendo!
ah, gestire le "cadute" dei player durante il gioco (connessione persa, riconnessione "ad" una nuova websock handler class!)