Tagchen,
hänge mal wieder an einem Problem.
Ich versuche gerade einen kleinen TS3-PHP-Bot zu machen.
An sich soweit kein Problem.
Die Verbindung , das Einloggen, das Auswählen des Servers und auch
das auslesen des Outputs ( in gewissen maßen ) funktioniert.
Nun möchte ich aber nach jeden abgesendeten Befehl
erstmal warten bis alles an Informationen zurück gekommen ist.
Zurzeit sieht das ganze so aus : (ACHTUNG: sehr quick & dirty ist noch rohfassung und nur local ausgeführt)
Spoiler anzeigen
Nun möchte ich nach jedem fwrite() alles was zurück kommt erhalten.
Ich wüsste nun nur keinen wirklich guten Ansatz.
Habe ja am Ende schon die while worin dann mehr oder weniger die Events abgefangen werden
die ich dann Parse und und und.
Nur möchte ich die vorher gehenden Befehle sauber abschicken und
auch die Antwort sauber zurück bekommen was hier manchmal einfach nicht geht
weil er dann die letzte Antwort garnicht ausgibt und diese dann schon in der while landet.
Irgendwelche Ideen ?
Kurzum was ich möchte:
- fwrite() sendet login daten
- nun möchte ich warten bis der server alles an mich gesendet hat ( meistens ist es nur die meldung "error id=0 msg=ok" oder halt mit einer error is + warum error)
- danach möchte ich den nächsten befehl senden und wieder warten bis alles zurück kam.
hänge mal wieder an einem Problem.
Ich versuche gerade einen kleinen TS3-PHP-Bot zu machen.
An sich soweit kein Problem.
Die Verbindung , das Einloggen, das Auswählen des Servers und auch
das auslesen des Outputs ( in gewissen maßen ) funktioniert.
Nun möchte ich aber nach jeden abgesendeten Befehl
erstmal warten bis alles an Informationen zurück gekommen ist.
Zurzeit sieht das ganze so aus : (ACHTUNG: sehr quick & dirty ist noch rohfassung und nur local ausgeführt)
PHP-Quellcode
-
- $tsFP = stream_socket_client("tcp://". $ip. ":". $tcpport , $errno, $errstr);
- echo "<br>";
- echo "DEBUG: Verbinde....";
- echo "<br>";
- if (!$tsFP) {
- echo "$errstr ($errno)<br />\n";
- } else {
- stream_set_blocking ( $tsFP , false );
- echo "Logging in.....<br>";
- flush();
- fwrite($tsFP, $logincmd. "\n");
- sleep(3);
- echo fgets($tsFP, 1024);
- echo "<br>";
- flush();
- echo "Select Server.....<br>";
- fwrite($tsFP, $usecmd. "\n");
- sleep(3);
- echo fgets($tsFP, 1024);
- echo "<br>";
- flush();
- echo "Register event.....<br>";
- fwrite($tsFP, $svnotif. "\n");
- sleep(3);
- echo fgets($tsFP, 1024);
- echo "<br>";
- flush();
- echo "Set name.....<br>";
- fwrite($tsFP, $svname. "\n");
- sleep(3);
- echo fgets($tsFP, 9999);
- echo "<br>";
- flush();
- echo "Get clientlist.....<br>";
- fwrite($tsFP, $svclientlist. "\n");
- sleep(3);
- echo fgets($tsFP);
- echo "<br>";
- echo "Got everything now loop.....<br>";
- flush();
- sleep(5);
- while (!feof($tsFP)) {
- $result = fgets($tsFP, 2048);
- if ($result != "") {
- if (containsWord($result ,"notifyclientleftview") )
- {
- $converted = getArray($result);
- echo "<pre>";
- print_r($converted);
- echo "</pre>";
- }
- if (containsWord($result ,"notifycliententerview") )
- {
- $converted = getArray($result);
- echo "<pre>";
- print_r($converted);
- echo "</pre>";
- }
- echo "<br>NEW ENTRY:::";
- echo $result;
- flush();
- }
- }
- fclose($tsFP);
- }
Nun möchte ich nach jedem fwrite() alles was zurück kommt erhalten.
Ich wüsste nun nur keinen wirklich guten Ansatz.
Habe ja am Ende schon die while worin dann mehr oder weniger die Events abgefangen werden
die ich dann Parse und und und.
Nur möchte ich die vorher gehenden Befehle sauber abschicken und
auch die Antwort sauber zurück bekommen was hier manchmal einfach nicht geht
weil er dann die letzte Antwort garnicht ausgibt und diese dann schon in der while landet.
Irgendwelche Ideen ?
Kurzum was ich möchte:
- fwrite() sendet login daten
- nun möchte ich warten bis der server alles an mich gesendet hat ( meistens ist es nur die meldung "error id=0 msg=ok" oder halt mit einer error is + warum error)
- danach möchte ich den nächsten befehl senden und wieder warten bis alles zurück kam.