Hallo zusammen
Ich habe ein vermutlich einfaches Problem, das ich nicht zu lösen weiss
. Bin totaler Java-Anfänger, deshalb: habt bitte erbarmen
.
Folgende Klassenstruktur habe ich:
- Server (startet RMI-Registry)
- Hello (Interface)
- HelloImpl (ArrayList von Clients, Methoden: addClient, removeClient, sendHello)
- Client (Interface)
- ClientImpl(Methoden: getName (über Kommandozeile wird Name übergeben), printHello)
- Main-Klasse mit main-Methode macht folgendes:
-> Referenz auf Hello-Objekt mit Naming.Lookup
-> neuer Client erstellen
-> Client hinzufügen (addClient)
-> warten auf User-input 'end' mit Scanner
-> wenn 'end' dann, Client aus Array-List in Hello entfernen
Der Server soll nun an alle angemeldeten Clients alle zwei Sekunden ein 'Hello World' senden. Die Clients sollen warten, bis der User mit "end" das Programm abbricht und sich dann vom Server wieder abmelden.
Das sendHello in HelloImpl wird in einer Endlos-Schleife an alle im Array-List gespeicherten Clients geschickt (printHello), danach wird zwei Sekunden geschlafen (sleep(2000).
Nun wird im Client auf den User-Input gewartet. Sobald ich 'end' eingebe, kommt er zwar zur Stelle, wo der Client wieder aus der Array-List entfernt wird, aber der Server schickt trotzdem das Hello World weiter an die Clients.
Wie unterbreche ich nun meine Endlosschleife in HelloImpl.sendHello? Muss das sendHello mit einem Thread mit Hilfe von wait und notify realisiert werden? Oder wie kann ich sonst auf den Client umschalten, so dass dort das removeClient ausgeführt werden kann und danach im sendHello der abgemeldete Client keine Hello Worlds mehr erhält?
Ich bin wirklich dankbar für einen Hinweis. Das mit dem RMI-Callback glaube ich verstanden zu haben, aber ob und wie RMI mit allfälligen Threads arbeitet kapier ich nicht.
Vielen Dank für alle Tips im Voraus.
pyramid
Ich habe ein vermutlich einfaches Problem, das ich nicht zu lösen weiss
Folgende Klassenstruktur habe ich:
- Server (startet RMI-Registry)
- Hello (Interface)
- HelloImpl (ArrayList von Clients, Methoden: addClient, removeClient, sendHello)
- Client (Interface)
- ClientImpl(Methoden: getName (über Kommandozeile wird Name übergeben), printHello)
- Main-Klasse mit main-Methode macht folgendes:
-> Referenz auf Hello-Objekt mit Naming.Lookup
-> neuer Client erstellen
-> Client hinzufügen (addClient)
-> warten auf User-input 'end' mit Scanner
-> wenn 'end' dann, Client aus Array-List in Hello entfernen
Der Server soll nun an alle angemeldeten Clients alle zwei Sekunden ein 'Hello World' senden. Die Clients sollen warten, bis der User mit "end" das Programm abbricht und sich dann vom Server wieder abmelden.
Das sendHello in HelloImpl wird in einer Endlos-Schleife an alle im Array-List gespeicherten Clients geschickt (printHello), danach wird zwei Sekunden geschlafen (sleep(2000).
Nun wird im Client auf den User-Input gewartet. Sobald ich 'end' eingebe, kommt er zwar zur Stelle, wo der Client wieder aus der Array-List entfernt wird, aber der Server schickt trotzdem das Hello World weiter an die Clients.
Wie unterbreche ich nun meine Endlosschleife in HelloImpl.sendHello? Muss das sendHello mit einem Thread mit Hilfe von wait und notify realisiert werden? Oder wie kann ich sonst auf den Client umschalten, so dass dort das removeClient ausgeführt werden kann und danach im sendHello der abgemeldete Client keine Hello Worlds mehr erhält?
Ich bin wirklich dankbar für einen Hinweis. Das mit dem RMI-Callback glaube ich verstanden zu haben, aber ob und wie RMI mit allfälligen Threads arbeitet kapier ich nicht.
Vielen Dank für alle Tips im Voraus.
pyramid