Daniel Thoma: Softwareprojekt

Beitrag lesen

Hallo Nick,

Wenn ich das jetzt richtig verstanden habe, wäre eine gute Lösung die folgende. Wird ein Spiel gestartet, erzeugt der Server zu diesem Spiel eine art Manager-Objekt. Aktuelle Spielstände, angemeldete Benutzer... kann das Objekt zur Verügung stellen. Für jede Instanz des Spiels wird auch ein neues Objekt erzeugt.

Ja so stelle ich mir das vor.

Die Speicherung der Daten kann in einer DB erfolgen oder vorzugsweise über eine geeignete Datenstrukur. Aber beim Verwenden des Manager-Objekts sollte man davon sowieso nix merken.

Richtig. Im Prinzip ist es fast egal, wie die erste Implementierung aussieht, wenn er Euch nicht sicher seid, welche Datenstrukturen wie am besten sind. Wenn die Schnittstelle stimmt, könnt ihr die Implementierung immer noch ersetzen.

Der Server und der Client kommunizierne über RMI mit einander. Beispielsweise bei einer Anfrage des Clienst GetNextCard(). Der Server leitet dann die Anfrage zum jeweiligen Objekt (Manager-Objekt weiter).

Richtig, wobei hier RMI schon sehr viel von selbst machen kann. Man kann z.B. eine Referenz auf das Manager-Objekt (bzw auf ein Hilfsobjekt, das zulässige Zugriffe an das Manager-Objekt weiter leitet) an den Client geben.
Darum, dass die Methodenaufrufe des Clients übers Netz zum Serverobjekt wandern, kümmert sich RMI selbst.

Vom Gefühl her würde ich sagen, machen wir den Server recht schlank. Sprich die Grafikdarstellungen, die einzelnen Bildchen der Karten... lagern wir komplett in das Spiel aus, welches auf dem Client läuft.

Klar, der Code für die GUI sollte auf jeden Fall auf dem Client laufen und nur logische Kommandos sollten ausgetauscht werden. RMI erlaubt es allerdings, ganze Objekte inklusive der Klasse und des zugehörigen Bytecodes übers Netz zu übertragen. Man könnte damit quasi die GUI des Spiels auf dem Server instanzieren und an den Client schicken. Damit müsste man neue Spiele nur auf dem Server installieren, nicht auf den Clients. Das war aber nur so eine Idee, so etwas würde ich höchstens machen, wenn am Schluss noch Zeit ist.

Der Client erhält Karten vom Server, zeigt diese an, gibt Karten zurück, stellt Anfragen, erhält Antworten oder Anweidungen...

Ja.

Das selbe macht die KI, nur ohne eine UI oder irgend eine grafische Darstellung.

Ja, die KI verwendet die selbe Schnittstelle, wie ein normaler Client. Nur greift sie eben nicht übers Netz per RMI zu, sondern läuft lokal. Der Server muss also so entworfen sein, dass er Kommandos/Ereignisse des Spiels an Client-Objekte bzw. Kommandos von diesen an das Spiel weiterreichen kann.
Ob das nun ein lokales Objekt (KI) oder ein entferntes Objekt (GUI-Client) ist, sollte an der Stelle keine Rolle spielen.

Grüße

Daniel