Closed 0FakE closed 8 years ago
Also getPlayersArray funktioniert bei dir so wie es sein soll?
getPlayersArray & getBansArray geben ausschließlich leere Arrays zurück, obwohl getPlayers & getBans die unformatierte Version ordentlich anzeigt.
Ändere ich folgende Zeile in getPlayersArray
$playersRaw = $this->send("players");
in
$playersRaw = $this->send("players") ? $this->getAnswer() : false;
gelingt auch die formatierte Ausgabe des PlayerArrays.
Allerdings gibt das BanArray nur und auschließlich immer ein leeren Array zurück, obwohl Bans vorhanden sind und unformatiert sichtbar mit getBans.
Nach einigem Hin- und Herprobieren habe ich das Suchmuster "preg_match_all" als Fehlerquelle indifiziert, kenne mich aber mich Suchmustern nicht aus.
Ebensfalls ein seltsames Phänomen ist es, dass die RCON Verbindung immer wieder sofort geschlossen wird. Setze ich die Variable
private $disconnected = true;
auf false, um die Verbindung selbst mit close zu schließen, ist die Funktion in diesem Falle nutzlos und gibt sogar noch verschiedene Fehler zurück.
Auch die Session private $socket = null;
so zu definieren, gibt bei
manueller Beendigung der Verbindung Warnungen und Fehler zurück.
Falls näheres Interesse deinerseits besteht die Probleme zu lösen, können wir uns auch gern persönlich unterhalten. Wie und wo auch immer...
Vielen Dank für dein Feedback.
Du hast mich auf einen kleinen Leichtsinnsfehler aufmerksam gemacht : Wie du schon geschrieben hast, $playersRaw = $this->send("players");
natürlich ist das Ergebnis leer, wenn die Antwort vom Server nicht abgelesen wird :joy:
Die Verbindung sollte eigntl erst am Ende geschlossen werden, da close()
erst im Destruktor aufgerufen wird. Um die Verbindung manuell zu schließen musst du nicht $disconnected = false
setzen. Diese Variable ist nur Klassen intern da, um zu bestimmen, ob die Verbindung bereits geschlossen wurde, weshalb diese auch auf private
gesetzt ist.
Ich ändere kurz die beiden Funktionen, wäre nett, wenn du mir sagen könntest ob sie funktionieren :+1:
In Ordnung. Ich lasse dir sobald alles verfügbar ist, ein Feedback zukommen.
Nochmal zum Thema Verbindung Beenden...
Wieso ist die Variable $disconnected dann in der Klasse extra definiert? Ich würde die Verbindung gern selbst aufrecht erhalten.
Okay... in den Deconstructor habe ich noch nicht geschaut.
Die Verbindung wird ja solange aufrecht erhalten, bis die Klasse nicht mehr gebraucht wird. Deswegen steht ja close()
im Destruktor.
Ja, ich würde die Verbindung gern solange aufrecht erhalten, bis ich sie schließe.
var_dump($rcon->getBans()); var_dump($rcon->getBansArray());
getBans -> liefert den unformierten Text zurück getBansArray --> liefert ein leeres Array
Wie ich gestern schon geschrieben habe, konnte ich den Fehler auf
die Funktion preg_match_all
eingrenzen, kenne mich aber nicht mit
Suchmustern aus.
Vielleicht könntest du hier nochmal drüber schauen?
Ansonsten ist alles Standard im Script bis jetzt. Die Aufrechterhaltung der Verbindung ändere ich später, wenn alle Probleme behoben sind.
Danke für die Rückmeldung, ich schau mir mal die RegEx an. Nochmals wegen der Verbindung, diese bleibt bis zur Beendung des Scripts bestehen und wird dann automatisch geschlossen. Solltest du diese vorher schließen wollen, musst du nur close()
ausführen. Die Verbindung aufrecht zu erhalten nach Ausführung des Scripts ist nur mit einem Daemon möglich und es sollte da ebenfalls kein Problem mit dem Destruktor auftreten.
Auf was ich auch aufmerksam geworden bin, ist die Tatsache, dass zum
kicken eines Spielers ein integer
nötig ist, also dessen aktuelle ID auf dem Server.
ban (name, ID or Player#)
kick (name, ID or Player#)
Die Befehle die an den Server via. RCON gesendet werden, können auch
den Namen, die ID oder die GUID enthalten. In deiner Funktion banPlayer
kann einen String angeben, also sowohl die Name, ID usw.
Vielleicht wäre eine Überarbeitung hier auch nicht verkehrt, die sowohl kicks und bans via. Name, ID & GUID erlaubt. Die cmds die ans RCON gesendet werden, erlauben dies ja.
Nützlich oder unnützlich?
Was auch noch zu erwähnen wäre, ist die Tatsache, dass bei einem Fehler das Script einen falschen boolean Wert zurück gibt.
var_dump($rcon->kickPlayer("FakE", "TEST BAN"));
Gekickt werde soll der Spieler FakE. Da die Funktion allerdings nur einen integer Wert, statt dem Namen zulässt, sollte eigentlich ein Fehler erscheinen. Nicht zuletzt dann, wenn der RCON Befehl nicht ausgeführt werden konnte.
Stattdessen bekomme ich allerdings true
zurück.
dashboard.php:10:boolean true
Auch die Funktion banPlayer
hat das gleiche Problem.
Deine Parameterbeschreibung lautet:
@param string $player Player who will be banned
Es ist aber nicht detailliert angegeben, welchen String ich verwenden soll. Player Name, vielleicht auch die ID oder doch die GUID?
Und auch hier gibt das Script boolean:true
zurück, obwohl nichts passiert ist.
Mit dem Parameter kümmer ich mich drum. Aktuell wird halt nur gecheckt, ob der Befehl gesendet werden konnte. Vielleicht hast du ja eine Idee, wie man checken kann, ob der Befehl ausgeführt wurde.
Oh stimmt... Ich habe noch nicht nachgeschaut, wie der return ermittelt wird. Denkt man genauer darüber nach, stellt sich mir dann die selbe Frage, die du mir stellst.
Ignorieren wir diesen Punkt mal...
Hat sich etwas neues bzgl. den banArrays ergeben?
Ich kam bis jetzt noch nicht dazu, mir die RegEx genauer anzuschauen, ich meld mich morgen, ob es etwas neues gibt.
Alles klar. Ich danke dir. Ich würde mich sehr freuen, wenn das Problem irgendwie behoben werden kann.
Mir ist bis jetzt nichts ungewöhnliches im Suchmuster aufgefallen. Ich werde, sofern heute noch möglich, den Author des Musters kontaktieren und ihn mal fragen.
getPlayers()
funktioniert mit der neusten Version, um getBans()
kümmer ich mich.
Wie gesagt, getBansArray() gibt immer 0 aus. Kannst du ja selbst nachprüfen...
getBans funktioniert mit der neusten Version ;)
Next time take it English that way I can see the array function was giving som problems :)
Yes, would have been better :)
Mir ist bis jetzt nichts Ungewöhnliches aufgefallen, bis auf https://github.com/Nizarii/arma-rcon-class-php/blob/master/arc.php#L532. Kannst bitte mal die Funktion formatList durch diese hier ersetzten? Vielen Dank schon mal im voraus! :+1:
Ich habe das selbe Problem, dass offenbar schon geklärt wurde. Leider ist der "diese hier" Github Link von dir nicht mehr aktiv.
Die Fehlerquelle ist:
preg_match_all("#(\d+)\s+(\b\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}:\d+\b)\s+(\d+)\s+([0-9a-fA-F]+)(\w+)\s([\S ]+)$#im", $bans, $str);
Er sortiert das PlayersArray ordentlich, gibt aber bei den Bans boolean:null aus.
Ich kann den Fehler darin leider nicht finden. Die preg_match_all Suche liefert keinen Wert zurück. Warum, wo ist der Fehler? Das Suchmuster ist das selbige wie bei dem PlayerArray