G
grayson
Gast
wie der titel schon sagt, suche ich nach einer möglichkeit von einem RMI server eine nachricht an alle clients zu senden.
dazu lasse ich jeden client eine register methode aufrufen, und der server speichert jeden client in einer arrayList.
wenn ich nun eine nachricht senden will, sieht es so aus, als ob der server den client aus der liste nimmt und die entsprechende methode aufruft... aber irgendwie bin ich immernoch auf dem server....
hier ein paar auszüge :
die connect methode die beim start des clients aufgerufen wird :
die methode des servers, um an alle clients zu senden :
die client methode um die nachricht zu zeichnen :
das resultat :
die zeile "System.err.println(msg);" die ich zum testen eingefügt habe, schreibt die nachricht in die konsole des servers, nicht wie sie es sollte in die konsole des clients. ich komme also vom server nicht zurück auf den client.....
kann mir jemand weiterhelfen, wie man es richtig macht?
dazu lasse ich jeden client eine register methode aufrufen, und der server speichert jeden client in einer arrayList.
wenn ich nun eine nachricht senden will, sieht es so aus, als ob der server den client aus der liste nimmt und die entsprechende methode aufruft... aber irgendwie bin ich immernoch auf dem server....
hier ein paar auszüge :
die connect methode die beim start des clients aufgerufen wird :
Code:
public void connect() {
// Ein SecurityManager ist unbedingt erforderlich
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
/* Beim Starten dieses Clienten-Programms kann man den Namen des
Server-Rechners (z.B. localhost) als
Kommandozeilen-Parameter angeben. Wenn man keinen Parameter an-
gibt, wird der Name "localhost" genommen:*/
String nameDesServerRechners = "localhost";
// URL-artiger Name des Server-Objekts:
String servObName01 = "rmi://" + nameDesServerRechners + "/MapServer1:1099";
try {
// Verbindung zu den Server-Objekten aufnehmen:
serverObjekt01 = (Starmapinterface) Naming.lookup(servObName01);
connected = true;
System.err.println("verbunden");
serverObjekt01.registerClient(this);
}
catch (Exception e) {
// Falls das Zugreifen nicht geklappt hat:
e.printStackTrace();
return;
} // try/catch
}
die methode des servers, um an alle clients zu senden :
Code:
public void setChatMsg(String msg){
for(int i=0;i<mRegisteredClients.size();i++){
StarmapClient c=(StarmapClient)mRegisteredClients.get(i);
c.setChatMsg(msg);
}
die client methode um die nachricht zu zeichnen :
Code:
public void setChatMsg(String msg){
System.err.println(msg);
MainStarmapPanel.setChatMsg(msg);
}
das resultat :
die zeile "System.err.println(msg);" die ich zum testen eingefügt habe, schreibt die nachricht in die konsole des servers, nicht wie sie es sollte in die konsole des clients. ich komme also vom server nicht zurück auf den client.....
kann mir jemand weiterhelfen, wie man es richtig macht?