Wie ihr bemerkt habt, kann der Client module laden - Siehe am Beispiel von Billard.
Ich werde euch nun zeigen, wie ihr komplett eigene Clientseitige Module schreibt. Dies ist relativ einfach.
Schritt 1: Die neue Klasse
Erstellt eine neue Klasse (Wir nennen Sie mal "Battleship").
Zum testen setzen wir mal einfach ein JFrame herein, was beim Starten dann aufgerufen wird.
|
Java-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
|
import javax.swing.JFrame;
public class Battleship {
public Battleship() {
System.out.println("Hello Module "Battleship"");
JFrame window = new JFrame("Schiffe versenken (Beta)");
window.setSize(450, 450);
window.setResizable(false);
window.setVisible(true);
}
}
|
Kompiliert diese Klasse und packt diese in einer JAR-File. Achtet darauf, dass die erzeugte JAR im ordner des Clienten liegt!
Wir nennen die Jar einfach mal "battleshipk90aiv.jar"
Schritt 2: Den Clienten abändern
Im Clienten sind zwei änderungen nötig, die aber nicht direkt die Source betreffen.
Ihr könnt entweder den Clienten entpacken, oder diesen direkt über WinRar öffnen um die beiden nötigen Dateien zu Modifizieren.
Als erstes Widmen wir uns dem Classpath in der MANIFEST.MF des Ordners META-INF.
Wie ihr seht, wurden dort schon einige JAR-Archive angegeben (billardk90aiv.jar und so weiter...). Dort fügen wir jetzt unser neues Modul im
Manifest-Version: 1.0
Class-Path: billard90aiv.jar battleship90aiv.jar bingo90aiv.jar poker90aiv.jar ani90aiv.ja
r search90aiv.jar cardgames90aiv.jar maumau90aiv.jar smileywars90aiv.
jar whois290aiv.jar
Created-By: 1.6.0_26 (Sun Microsystems Inc.)
Achtet darauf, dass die jar-files mit einem
Leerzeichen getrennt sind!
Jetzt müssen wir noch weitere Infos in der
INDEX.LIST hinzufügen (auch im Ordner
META-INF).
Inder Index-File werden alle Jar-Files und deren Klassen angegeben. Wenn ihr hier etwas hinzufügt, achtet bitte auf die Struktur der Datei, sprich, es wird erst die JAR-File angegeben und dann deren beinhaltenden Klassen. Danach erscheint eine Leerzeile für ein neues Package.
Wir fügen also unser neues Modul auch hier hinzu:
battleship90aiv.jar
Battleship.class
Das wars auch. Speichert die Beiden Dateien ab, wenn ihr diese über WinRar geöffnet habt oder Packt alle Client-Files wieder zurück in einer Jar, sofern ihr diese entpackt habt.
Schritt 3: Serverseitig ansprechen
Das Modul kann nun aufgerufen werden, indem der alte Module-Token genutzt wird:
?\00\0Channel\0Modul
Beschreibung:
[1] ? - Opcode
[2] 0 - Unbekannt
[3] Channel - Der jeweilige Channel
[4] Module - Die jeweilige Modul-Klasse
Wie ihr sehen könnt, müsst ihr den jeweiligen Channel mit angeben, worin das Modul geladen werden soll und dementsprechend den Klassennamen des Modules.
Ich zeige es euch mal anhand von Zwei Beispielen:
// Billard
?\00\09-Ball\0BillardManager - BillardManager.class wird aufgerufen
// Battleship
?\00\0Schiffe versenken (Beta)\0Battleship - Die Battleship.class wird aufgerufen
Denkt daran, den Browsercache (und ggf. den Java-Cache) zu leeren, damit das Modul beim nächsten aufruf des Clienten mitgeladen wird.
Ich werde das Tutorial bald noch updaten, da ich euch dann zeige, wie man nun ein komplettes Spiel programmiert. Wenn ihr jetzt schon selbst an etwas eigenes basteln wollt, müsst ihr den Clienten ein wenig studieren um zu sehen, welche Methode zum versenden/empfangen genutzt wird, werde mich die Tage irgendwann mal damit beschäftigen.