Hier mal ein simples Tutorial, wie man einen wirklich einfachen Logger auf Basis der Standalone-App erstellt.
1. Erstelle ein Java-Projekt
2. Erstelle ein libs Ordner
3. Kopiere die StApp in den libs Ordner und füge alle .jar-Files zum Build-Path des Projektes hinzu
Code:
C:\Users\<User>\Knuddels-Stapp\bXXXXX\ > /libs/
4. Erstelle eine simple Logger-Klasse mit Start-Methode:
public class KnuddelsLogger extends base.GroupChatStandalone {
public KnuddelsLogger(String[] arg0, String arg1, int arg2) {
super(arg0, arg1, arg2);
}
public static void main(String[] args) {
new KnuddelsLogger(args, null, args.length);
}
}
Die Klasse muss von base.GroupChatStandalone erben.
Im prinzip kann die StApp nun bereits gestartet werden.
Da wir aber die Pakete mitloggen möchten, müssen wir eine Methode suchen und auch überschreiben. Um die Pakete, die empfangen suchen wir in der Superklasse eine Methode, die folgendes Schema besitzt:
Zitat:
public boolean <NAME>(String X)
Da es einige wenige Methoden gibt, die diesem Schema entsprechen, müssen wir einfach herumprobieren und in unserer Logger-Klasse die Methode einfach überschreiben:
@Override
public boolean tx(String a) {
return super.tx(a);
}
Um nun mitzuloggen, müssen wir nur das ganze ausgeben:
@Override
public boolean tx(String a) {
System.out.println("[SEND] " + a);
return super.tx(a);
}
Für Profis unter uns können wir das ganze nun noch etwas "formatieren", damit man die Tokens besser sieht - Hierzu benutze ich das mitgelieferte JSON:
@Override
public boolean tx(String a) {
JSONArray j = new JSONArray();
String[] tokens = a.split("\0");
for (int i = 0; i < tokens.length; i++) {
j.add(tokens[i]);
}
System.err.println("\n\tSEND: " + JSONArray.toJSONString(j));
return super.tx(a);
}
Voilá, fast fertig!
Das ganze müssen wir nun auch beim Receiver machen. Da sucht man sich nur die Methode, wo StringTokenizer verwendet werden.
Und so schaut das ganze dann aus:
Zitat:
[...]
ServerSetting changed [chat.knuddels.de:2710/80 => DE]
JX Starting Browser-Prewarm ...
Connecting to server ...
Using Normal Socket
No version file detected: C:\Users\************\eclipse-workspace\Knuddels Billard-Debug\inst.version
SEND: ["t","V9.0cab ","https:\/\/www.knuddels.de\/STAPP-null","14","14.0.2 (64bit)","-","62150","OpenJDK 64-Bit Server VM","****************","4076","Oracle Corporation","Windows 10 64bit)","standalone","********","***************** *******"]
Connection try returned [0] Elapsed: 1462
UPDATED Protocol 85037142 - 01.11.2020, 18:47:14
JX-B1 Created new browser view. browserType: JX/HEAVYWEIGHT/persistent, appId: BrowserPrewarm
JX Browser-Prewarm DONE: 675ms
Extended - Billard Logger
Hierzu gehen wir in den lib Ordner und öffnen die main.jar mit WinRAR (oder einem ZIP-Programm). Hier löschen wir die BillardManager.class. Zieht die vorher am besten auf den Desktop und decompiliert sie, um die BillardGame-Klasse zu extrahieren.
Wir erstellen nun im Java-Projekt eine BillardManager-Klasse und erweitern (wie beim Original) die BillardGame-Klasse:
public class BillardManager extends cyz {
}
Wir folgen der BillardGame-Klasse (cyz) und finden das Interface für das Modul-System (onRecieve, destroy, regsiterModule). Hier überschreiben wir nun die Methoden:
public class BillardManager extends cyz {
// onReceive
@Override
public void j(final StringTokenizer stringTokenizer) {
JSONArray j = new JSONArray();
StringBuffer b = new StringBuffer();
P.S. Falls eclipse oder Java wegen irgendwelchen Security-Gedönse meckert, löscht einfach in allen .jar files die MANIFEST!
Diese enthält nämlich Fingerprints des Builds.