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 .
|