Indice - Progetto di Reti di Calcolatori - Fabio Adani e Marco Chiesi
Implementazione

RoomClient

Questa classe si occupa delle operazioni relative ad una stanza, vale a dire invio di messaggi, creazione e avvio delle partite. Si tratta di una classe remota, infatti implementa l'interfaccia IRoomClient ed alcuni suoi metodi sono chiamati dal ClientAgent. L'interfaccia IRoomClient prevede i seguenti metodi:

IGameClient getGameClient() throws RemoteException;
void receiveMsg(String nick, String text) throws RemoteException;
void receivePrivateMsg(String mitt, String text) throws RemoteException;
void joinedGameRoom(String nick) throws RemoteException;
void leftGameRoom(String nick) throws RemoteException;
void createdMatch(String nick, String matchName) throws RemoteException;
void enteredMatch(String nick, String matchName) throws RemoteException;
void exitedMatch(String nick, String matchName) throws RemoteException;
void deletedMatch(String matchName) throws RemoteException;
void startedMatch(String matchName) throws RemoteException;
void finishedMatch(String matchName) throws RemoteException;
void callFinishMatch() throws RemoteException;

Il signficato di tali metodi è già stato chiarito in sede di progetto relativamente all'interazione client-server.

Le variabili interne al RoomClient sono le seguenti:

IClientAgent clientAgent; Riferimento remoto all'gente del client presso il server
IGameClient gameClient Riferimento al client del gioco
IRoomClientUI ui; Riferimento all'interfaccia grafica
String userName; Nome del giocatore
String currentGame; Nome del gioco corrente
String currentMatch; Nome della partita corrente

Inoltre è presente un gestore di eventi RoomClientEventHandler, per disaccoppiare l'attività del client rispetto a quella dell'interfaccia grafica. Questo gestore di eventi non fa altro che riconoscere il tipo di evento e chiamare l'opportuno metodo di ClientAgent. Per un elenco completo di tali eventi si veda la classificazione già descritta.

Va sottolineato il fatto che lo stato delle variabili del client viene modificato soltanto dopo aver ricevuto la chiamata di ritorno dal server, questo perchè alcune chiamate potrebbe fallire, e se si aggiornasse lo stato prima di aver ricevuto la conferma, si rischia di trovarsi in uno stato inconsistente. Ad esempio, se un utente decide, tramite l'interfaccia grafica di entrare in una partita, viene generato un evento EnterMatchEvent, che viene messo nella coda di eventi del RoomClient. Il gestore degli eventi provvederà quindi a chiamare il metodo enterMatch di ClientAgent. Questo metodo però potrebbe anche non avere successo, in quanto, nel frattempo la partita in cui si sta cercando di entrare potrebbe essere stata cancellata. Pertanto è necessario attendere l'invocazione del metodo enteredMatch da parte del ClientAgent prima di poter effettivamente impostare il valore della variabile currentMatch.

Indietro Inizio pagina Avanti
Indice   Fabio Adani e Marco Chiesi