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

Quand un client envoie un message :
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 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
 
Client client = new ClientImpl();
Client stub = (Client)UnicastRemoteException.exporteObject(client, 0);
...
group.enregistrer(stub);
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
 
Client client = new ClientImpl();
group.enregistrer(client);
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.

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 !