You are not logged in.

  • Login
Bitte besucht unser neues Forum unter https://forum.nitrado.net | Please visit our new Forum at https://forum.nitrado.net

Dear visitor, welcome to Nitrado.net Prepaid Gameserver Community-Support - Archiv. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

ChillUpX

User / Kunde

  • "ChillUpX" is male
  • "ChillUpX" started this thread

Posts: 1,721

Occupation: FISI Azubi

Thanks: 21

  • Send private message

1

Sunday, August 3rd 2014, 11:57pm

MysqlActions - Methoden ausführen via MySQL!

Hallo liebe Community!
Ich habe mich vorhin mal daran versucht, einzelne Klassen aus Ordnern zu laden und dann Methoden aus diesen auszuführen. Daraus ist dann das kleine Plugin "MysqlActions" entstanden. Das ganze läuft wie der Name schon sagt über MySQL. Da ich im Moment auch einige Webtools entwickel die mit Servern zusammenarbeiten schien mir das als praktische "Übung".

Funktionsweise
Das Plugin fragt alle x Sekunden von der Datenbank alle unbearbeiteten Requests ab. Bei diesen Requests handelt es sich um einen Eintrag in die vom Plugin automatisch erstellte Mysql-Tabelle. Das Plugin arbeitet ausschließlich mit Klassen, die man im "plugins/MysqlActions/classes/" Ordner ablegt hat. Diese Klassen implementieren das "MysqlActionListener"-Interface, welcher die Methoden action() und action(String arg) vorschreibt. Warum bei der Beschreibung wie man MysqlActions verwendet. In die Mysql-Tabelle wird dann nach abarbeiten des Requests eine "Antwort" und ein Timestamp in Form von System.currentTimeMillies(); eingetragen. Sollte eine Klasse nicht gefunden werden oder nicht die vorgegebenen Methoden enthalten, wird einfach "done" als Antwort eingetragen. Genau so wenn die Methoden null zurückgeben.

Verwendung
Erstmal will ich jetzt die "Requests" erklären. Man "schickt" diese ab, indem man in der Mysql-Tabelle einen neune Eintrag erstellt und in die Spalte "request" den Request-String einträgt. Dieser Request-String sieht wie folgt aus:

PHP Source code

1
    Klassenname(:Argument)

Wenn man nur einen Klassennamen angibt, dann wird beim Abarbeiten des Requests die Methode action() aus der angegebenen Klasse ausgeführt. Wenn zusätzlich noch ein Argument angegeben wird, wird die Methode action(String arg) ausgeführt und das Argument als String übergeben.

Klassen
Ich habe mir eine Klasse Test.java (Compiliert dann .class) angelegt (Wichtig: Name der .class und der Klasse müssen gleich sein!). Diese sieht wie folgt aus:

Java source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import org.bukkit.Bukkit;
import de.chillup.MysqlActionListener;
   
public class Test implements MysqlActionListener {   
    public String action() {        
        return null;   
    }	   

    public String action(String arg) {       
        if(arg.equalsIgnoreCase("port")) {           
            return String.valueOf(Bukkit.getServer().getPort());       
        }       
        else if(arg.equalsIgnoreCase("online")) {          
            return String.valueOf(Bukkit.getOnlinePlayers().length);        
        }       
            
        return null;
    }
}

Wie man sieht, will ich hier nur auf die Variante mit übergebenen Argument eingehen. Wenn das Argument dann "port" lautet, will ich den Port des Servers zurückgeben (Bukkit-API verwendbar!), wenn er "online" lautet, dann will ich die Spielerzahl zurückgeben. Wenn der Request-String also so aussieht:

PHP Source code

1
    Test:port

dann wird in der Datenbank nach Abarbeitung des Requests der aktuelle Port und ein Timestamp eingetragen. Genau so das gleiche für den Request-String "Test:online", nur dann wird mir die aktuelle Spielerzahl zurückgegeben.

Schlusswörtchen
Ihr könnt das Ganze gerne ausgiebig Testen und mir auch gerne Ideen mitteilen. Ich will dieses Prinzip sobald es BukkitDev-Würdig auch dort hochladen, vielleicht findet es ja anklang. Die MysqlActions.jar und Test.class befinden sich beide im Anhang. Bugs bitte mit Log-Ausschnit als Spoiler oder als Datei-Anhang hier rein posten. Wer eigene Klassen entwickelt hat kann diese auch gerne als Anhang hier drunter posten. :)

~ChillUpX/Rony
ChillUpX has attached the following file:

This post has been edited 4 times, last edit by "ChillUpX" (Aug 4th 2014, 12:11am)


dahendriik

Moderator im Ruhestand

  • "dahendriik" is male

Posts: 1,495

Thanks: 17

  • Send private message

2

Monday, August 4th 2014, 12:35am

Sehr gut Aufgebaut und gut erklärt.

ChillUpX

User / Kunde

  • "ChillUpX" is male
  • "ChillUpX" started this thread

Posts: 1,721

Occupation: FISI Azubi

Thanks: 21

  • Send private message

3

Monday, August 4th 2014, 12:40am

Danke @wohendriik. :)

~ChillUpX/Rony

Bitte besucht unser neues Forum unter https://forum.nitrado.net| Please visit our new Forum at https://forum.nitrado.net