Bonsoir à tous,
Je suis entrain de travailler sur un projet, et j'aimerais savoir comment passer une interface en paramètre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public interface Groupe extends Remote{ public void diffuser(String message) throws RemoteException; public void enregistrer(Client client) throws RemoteException; }Un serveur met en RMI registry une interface Groupe qui permet aux clients de s'enregistrer sur le serveur et de diffuser des messages aux autres membres. Les clients sont enregistrés dans un ArrayList<Client> sur le serveur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public interface Client extends Remote{ public void recvMessage(String msg) throws RemoteException; }
Quand un client envoie un message :
Le problème est que je ne sais pas comment passer une interface Client au serveur lors de l'enregistrement. Si j'exporte l'interface :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public void diffuser(String msg){ for(Client client : clients){ client.recvMessage(msg); } }
Le client reste bloqué jusqu'à ce qu'il est unexport. Sinon je ne passe que l'interface au serveur sans l'exporter:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Client client = new ClientImpl(); Client stub = (Client)UnicastRemoteException.exporteObject(client, 0); ... group.enregistrer(stub);
Il faut que l'implémentation de l'interface Client soit Sérialisable, et il passe entièrement l'objet au serveur, les message reçus sont affiché chez serveur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Client client = new ClientImpl(); group.enregistrer(client);
Donc j'aimerais savoir s'il y a moyen d'enregistrer le client sur le serveur sans bloquer le thread du client et de retourner le message correctement vers le client?
Merci d'avance !![]()
Partager