Ankündigung

Einklappen
Keine Ankündigung bisher.

TeamSpeak 3 PHP Framework - clientList updated nicht

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • TeamSpeak 3 PHP Framework - clientList updated nicht

    Hallo zusammen,

    Ich nutze folgendes Framework: https://docs.planetteamspeak.com/ts3...ork/index.html
    Der Versuchsaufbau:


    PHP-Code:
    require_once("framework/teamspeak3/libraries/TeamSpeak3/TeamSpeak3.php");

    TeamSpeak3::init();
    $server Teamspeak3::factory("serverquery://bot:2RXM2UXc@127.0.0.1:10011/?server_port=9987&nickname=PHP-Bot#no_query_clients");

    while(
    true) {
        
    $server->channelListReset();
        
    $parent $server->channelGetByName("TestChannel");
        
    $subs $parent->subChannelList();
        echo 
    count(end($subs)->clientList());
        
    sleep(1);

    Das Script wird in der Konsole ausgeführt und das Framework verbindet sich erfolgreich auf den Server.
    Der Parentchannel "TestChannel" ist erstellt und enthält Subchannel.

    Nun erwarte ich als Ausgabe die Anzahl der Clients im letzten Subchannel

    Wenn das Script gestartet wird und es befindet sich nimand im letzten Subchannel wird mir 0 zurückgegeben, allerdings sobald jemand den Channel betritt bleibt dieser Wert auf 0.
    Andersherum genau so: wird das Script gestartet während sich bereits jemand im Channel befindet wird eine 1 zurückgegeben, sobald der Client den Channel verlässt bleibt dieser Wert auf 1 bestehen.
    Sprich "clientList" gibt keine geänderten Werte.

    Wenn ich "Teamspeak3::factory" mit in die Whileschleife gebe funktioniert es, allerdings habe ich dann pro Update der Zahl eine neue Serververbindung, was deffinitiv keine Endlösung ist.

    Ich habe bereits versucht mit der Funktion "channelListReset" die Framework-Internen(?) Listen zurückzusetzen, ohne Erfolg.

    Hat jemand eine Idee oder eine Lösung?

    Vielen Dank
    MfG
    Elias
    Wenn dein Plan nicht funktioniert, dann ändere den Plan aber niemals das Ziel!

  • #2
    Ich kenne mich mit dem Framework nicht aus, aber PHP ist in der Regel nicht für langlaufende Prozesse gemacht.
    Du solltest dein Skript einfach in regelmäßigen Abständen neu aufrufen oder eine andere Sprache verwenden, welche auch langlaufende Prozesse gut Handhaben kann.

    Ansonsten scheint diese Methode dir bereits die Anzahl der Clients zu geben: https://github.com/planetteamspeak/t...erver.php#L706

    PHP-Code:
      /**
       * Returns the number of client identities known by the virtual server.
       *
       * @return integer
       */
      
    public function clientCountDb()
      {
        return 
    current($this->execute("clientdblist -count", array("duration" => 1))->toList("count"));
      } 

    Kommentar


    • #3
      Hallo,

      Vielen Dank erstmal. Wie ich das Script letztendlich laufen lasse überleg ich mir noch. Evtl. per Cronjob etc.

      Was den Code angeht hatte ich halt das Problem, das ich die Anzahl von Users in einem Channel brauche und nicht die Gesamtzahl aller User. Die Funktion gibt nur alle gespeicherten User zurück, unabhänig ob Online oder in einem Channel (oder etwa nicht?)
      Meine Lösung dazu war schlicht aus dem Channel-Objekt den Index total_clients auszulesen...


      PHP-Code:
      require_once("framework/teamspeak3/libraries/TeamSpeak3/TeamSpeak3.php");

      TeamSpeak3::init();
      $server Teamspeak3::factory("serverquery://bot:2RXM2UXc@127.0.0.1:10011/?server_port=9987&nickname=PHP-Bot#no_query_clients");

      while(
      true) {
          
      $server->channelListReset();
          
      $parent $server->channelGetByName("TestChannel");
          
      $subs $parent->subChannelList();
          echo 
      end($subs)['total_clients'];
          
      sleep(1);

      die Funktion "channelListReset" muss übrigens weiterhin aufgerufen werden.

      Vielen Dank!
      Wenn dein Plan nicht funktioniert, dann ändere den Plan aber niemals das Ziel!

      Kommentar

      Lädt...
      X