[RMI] Garder une trace des clients
bonjour,
Je souraite garder une trace des tout mes clients (RMI) pour pouvoir les notifiers avec certaines informations.
J'ai donc essayé de faire ceci:
Serveur:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| public class Server extends UnicastRemoteObject implements LoginInterface, ModelInterface {
private static Prog prog;
private static ArrayList<Client> clientList;
/**
* Constructeur de la classe Server
*/
public Server () throws RemoteException {
}
/**
* méthode qui démarre le serveur
*/
public static void main(String[] args) throws Exception {
String serverName = "sServer";
Server sServer = new Server();
Server.clientList=new ArrayList();
try{
//le registre RMI est initialisé ici!
java.rmi.registry.LocateRegistry.createRegistry(1099);
} catch (Exception e) {
System.out.println("Erreur: le programme n'a pas pu créer le registre");
}
//On lance le rebind avec le nom du serveur et l'objet serveur qu'on vient de créer
Naming.rebind(serverName, sServer);
//On affiche l'adresse IP du serveur
System.out.println(serverName +" est en marche" + " l'adresse IP du serveur est: "+
InetAddress.getLocalHost().toString());
//Une instance de la classe prog, qui gère le jeu, est lancée
prog = new Prog();
}
/**
* Envoie l'objet Prog
*/
public Prog getProg() throws RemoteException {
return this.prog;
}
public void login(Client newClient) throws RemoteException {
Server.clientList.add(newClient);
}
} |
le client:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| public class Client extends UnicastRemoteObject implements Serializable {
private static LoginInterface loginServ;
private static ModelInterface modelServ;
/**
* Constructeur de la classe
*/
public Client () throws RemoteException{
}
/**
* Méthode qui démarre le / les clients
*/
public static void main(String[] args) throws RemoteException {
//ici on introduit l'adresse IP du serveur
String hostname = "//127.0.1.1/sServer";
if (args.length > 0) {
hostname = "//" + args[0] + "/sServer";
} else {
System.out.println("Pas de hostname saisi, le client est lancé" +
" sur cette machine");
}
try{
/**Le client effectue un lookup sur les deux interfaces du jeu,
* pourintéragir avec le serveur
*/
modelServ = (ModelInterface) Naming.lookup(hostname);
loginServ = (LoginInterface) Naming.lookup(hostname);
System.out.println("La connexion au serveur a été établie!");
}
catch(Exception e){
System.out.println("Le serveur n'a pas été trouvé!");
}
finally{
new GUI.MainMenuGUI(modelServ).setVisible(true);
// --- C EST ICI QUE CA PLANTE :-)
loginServ.login(this);
}
} |
et mon LoginInterface:
Code:
1 2 3
| public interface LoginInterface extends Remote {
public void login(Client newClient) throws RemoteException;
} |
Malheureusement j'ai une erreur dans le client qui me dis "non-static variable this cannot be referenced from a static context". Je comprend bien que mon client est un static mais je ne sais pas comment faire pour résoudre ce problème et avoir une liste de mes clients...
Merci