Si definisca una interfaccia ChatRoomCommand che richieda l'implementazione del metodo
public Message execCRC(ChatRoom chatRoom, Object opt_param);Il parametro opt_param permette, se necessario, di passare un parametro opzionale al metodo execCRC nell'eventualità che questo fosse utile. Quindi si definiscano le seguenti classi che implementano l'interfaccia ChatRoomCommand, una per ogni possibile comando eseguibile su di un oggetto di tipo ChatRoomCommand:
public class Send2AllCRC implements ChatRoomCommand { private Message2All message; public Send2AllCRC(Message4All message) { this.message = message; } public ... get... public void set... public Message execCRC(ChatRoom chatRoom, Object opt_param) { Message answer = new Message(); answer.setFrom(chatRoom.chatRoomName()); try { chatRoom.send2All(message); answer.setMessageText(``Send2AllCRC done!''); } catch (ChatRoomException err) { answer.setMessageText(``Send2AllCRC failed: '' + err.getMessage()); } return answer; } }Le altre classi sono del tutto analoghe.
Infine definire una semplice classe SimpleChatServer che crea un oggetto di tipo ChatRoom ed invoca su di esso alcuni comandi in un metodo main. Ad esempio, supponiamo di voler creare due utenti, @matteo e @cristina, che si collegano e parlano attraverso il nostro chat server. Il metodo main di SimpleChatServer dovrebbe contenere tra le altre le seguenti istruzioni:
... ChatRoom ChatRoom = new ChatRoom(``Laboratorio di Progr. in Rete''); ... // creazione degli utenti nella chat room User matteo = new Utente(``@matteo''); User cristina = new Utente(``@cristina''); ... // creazione del comando GetIntoRoomCRC ChatRoomCommand getIntoRoomCRCMatteo = new GetIntoRoomCRC(matteo); ... // esecuzione dei comandi GetIntoRoomCRC getIntoRoomCRCMatteo.execCRC(chatRoom, null); ... // creazione di un messaggio Message4All mes1 = new Messagge4All(matteo, " testo "); ... // creazione del comando di invio a tutti di un messaggio ChatRoomCommand send2AllCRC1 = new Send2AllCRC(mes1) ... // esecuzione dell'invio di send2AllCRC1 send2AllCRC1.exeCRC(chatRoom, null); ... // creazione del comando di lettura di un messaggi ChatRoomCommand receiveCRC1 = new ReceiveCRC(cristina); ... // esecuzione del comando receiveCRC1 e stampa del risultato System.out.println(receiveCRC1.execCRC(chatRoom, null)); ...La necessità di passare come parametro attuale del metodo execCRC un oggetto di tipo ChatRoom sarà chiara nella Sezione 2.6.