Esame di Reti di Calcolatori LS Andruccioli Daniele
Gli elementi del sistema ORB ha la funzione di servizio di nomi. Gestore ha la funzione di server: gestisce i nomi dei client registrati (siano giocatori o tavoli) e mantiene aggiornate dinamicamente le liste dei client attivi. Tavolo come client deve registrarsi e fare il login e il logout nel Gestore, come server fornire deve fornire i metodi che servono ai giocatori per unirsi al tavolo. Giocatore deve registrarsi e fare il login e il logout nel Gestore e può unirsi a uno o più tavoli.
Gestore Tavolo Interazioni logiche con il Gestore Tavolo
Interazioni logiche con i tavoli Tavolo
File IDL module OG { interface Giocatore { boolean notificaServer(in string messaggio); boolean notificaPartita(in boolean stato); }; interface Tavolo { boolean unisciti(in string nome); boolean notificaTavolo(in string messaggio); boolean notificaServer(in string messaggio); }; interface Gestore { boolean registrazioneTavolo(in string nome); boolean registrazioneGiocatore(in string nome); string loginTavolo(in string nome); boolean logoutTavolo(in string nome); string loginGiocatore(in string nome); boolean logoutGiocatore(in string nome); boolean notificaTavoloDown(in string nome); boolean notificaGiocatoreDown(in string nome); };
Metodi remoti del Gestore (1) boolean registrazioneTavolo(String nome) Serve per registrare un tavolo. Se è già presente un tavolo con quel nome fra quelli già registrati restituisce false, altrimenti aggiunge il nome fra i registrati e restituisce true. boolean registrazioneGiocatore(String nome) Serve per registrare un giocatore. Se è già presente un giocatore con quel nome fra quelli già registrati restituisce false, altrimenti aggiunge il nome fra i registrati e restituisce true. string loginTavolo(String nome) Serve per il login di un tavolo. Se è già presente un tavolo con quel nome fra quelli nella lista o se il tavolo non è registrato restituisce false, altrimenti aggiunge il nome alle lista, notifica lazione agli interessati e restituisce true. boolean loginGiocatore(String nome) Serve per il login di un giocatore Se non è presente un giocatore con quel nome fra quelli in lista o se il giocatore non è registrato restituisce false, altrimenti rimuove il tavolo dalla lista, notifica lazione agli interessati e restituisce true.
Metodi remoti del Gestore (2) string logoutTavolo(String nome) Serve per il logout di un giocatore Se non è presente un giocatore con quel nome fra quelli in lista restituisce false, altrimenti rimuove il tavolo dalla lista, notifica lazione agli interessati e restituisce true. boolean logoutGiocatore(String nome) Serve per il logout di un giocatore Se non è presente un giocatore con quel nome fra quelli in lista restituisce false, altrimenti rimuove il tavolo dalla lista, notifica lazione agli interessati e restituisce true. boolean notificaTavoloDown(String nome) Serve per segnalare se un tavolo è caduto Se il tavolo non fa parte della lista restituisce false, altrimenti fa il logout del tavolo e restituisce true. boolean notificaGiocatoreDown(String nome) Serve per segnalare se un tavolo è caduto Se il giocatore non fa parte della lista restituisce false, altrimenti fa il logout del tavolo e restituisce true.
Metodi del Tavolo boolean unisciti(String nome) Serve al giocatore per unirsi al tavolo Se il tavolo non è disponibile restituisce false, mentre se è disponibile, aggiunge il giocatore alla lista e restituisce true. boolean notificaTavolo(String messaggio) Serve agli altri tavoli per notificare lo stato della propria partita boolean notificaServer(String messaggio) Serve al Gestore per notificare il login e il logout di un tavolo o di un giocatore
Metodi del Giocatore boolean notificaServer(in string nessaggio) Serve al Gestore per notificare il login e il logout di un tavolo boolean notificaPartita(in string nome) Serve al tavolo per notificare linizio o la fine della partita Se il valore di ingresso è true, significa che è iniziata la partita, se è false significa che la partita è finita
Implementazione del Messaggio nome add nome rem... nome add nome rem...
Valutatore del Messaggio Public String valuta(ListaBeanElementi listaTavoli, ListaBeanElementi listaGiocatori, String input) Se si devono aggiornare sia la lista di tavoli che quella di giocatori public String valutaTavoli(ListaBeanElementi listaTavoli, String input) Se si deve aggiornare solo la lista di tavoli public String valutaGiocatori(ListaBeanElementi listaGiocatori, String input) Se si deve aggiornare solo la lista di giocatori Le liste sarebbero potute essere implementate in qualsiasi modo, ma si è scelto di farlo utilizzando i java bean in modo che sia garantita la coerenza delle liste di giocatori allinterno della classe tavolo.
Interfaccia utente
Reazione a cadute nalla rete Tavolo
Reazione a cadute nalla rete Tavolo Gestore
Reazione a cadute nalla rete Tavolo Gestore
Reazione a cadute nalla rete Tavolo Gestore Tavolo
Conclusioni Questa è unarchitettura generale che può andare bene per varie applicazioni multigiocatatori in rete. A seconda del gioco ogni tavolo può prevedere dei metodi per il gioco, oppure generare dei processi che si occupino della gestione della partita. Evoluzioni del sistema possono prevedere di attribuire un punteggio ai giocatori che viene modificato alla fine di ogni partita.