Passage d'une interface RMI en paramètre
Bonsoir à tous,
Je suis entrain de travailler sur un projet, et j'aimerais savoir comment passer une interface en paramètre.
Code:
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:
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:
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:
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:
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 ! :aie: