NetVision-Technik

NetVision-Technik (http://www.netvision-technik.de/forum/index.php)
-   Webserver (http://www.netvision-technik.de/forum/forumdisplay.php?f=9)
-   -   TS3 Fehler ?! (http://www.netvision-technik.de/forum/showthread.php?t=5940)

dienr2 18.11.2010 09:35

TS3 Fehler ?! ADD ts2 fehler
 
Hallo hab seit neusten den Fehler aufm Tracker das links an der Seite wo das ts3 angezeigt wird immer angezeigt wird :

TS3 Server returned the following error: Welcome to the TeamSpeak 3 ServerQuery interface, type "help" for a list of commands and "help " for information on a specific command. error id=3329 msg=connection failed, you are banned extra_msg=you may retry in 391 seconds

Aber bekomme das net weg. Wodran liegt das ?

weil ab und zu wirds wieder angezeigt und dann wieder nicht

ADD Das erste Problem ist gelöst ; )

Aber der neue server den ich hab ist doof ; ) jetzt zeigt er mir beim TS2 an wenn ich ihn starten will :

server/# ./ts2/tss2_rc2/teamspeak2-server_startscript start
WARNUNG ! For security reasons we advise: DO NOT RUN THE SERVER AS ROOT
!!!!!!!!!!!
starting the teamspeak2 server
Couldnt find server_linux

aber die datei ist vorhanden und hatt auch rechte


Rasta 18.11.2010 09:38

trage deine WebServer IP in die "query_ip_whitelist.txt"

TS und apache2 restarten = done!

dienr2 18.11.2010 09:43

LOOOl klar wenn man andere ip hatt muss mann die auch umtragen. bin ich bl...

THX

Kann geschlossen werden

Rasta 18.11.2010 09:45

auch wenn du ein TS3 Webi hast... musst du es machen auch wenns localhost... habe ich gerade festgestält ^^

Lex 18.11.2010 10:02

Nicht nur!!! Wenn du die Berechtigungen für deinen TS3 nicht richtig einstellst
kann es auch zu dieser Fehlermeldung kommen.
Infoformationen dazu gibts hier => NetVision-Technik

Lg Lex

dienr2 18.11.2010 10:40

ADD Das erste Problem ist gelöst ; )

Aber der neue server den ich hab ist doof ; ) jetzt zeigt er mir beim TS2 an wenn ich ihn starten will :

server/# ./ts2/tss2_rc2/teamspeak2-server_startscript start
WARNUNG ! For security reasons we advise: DO NOT RUN THE SERVER AS ROOT
!!!!!!!!!!!
starting the teamspeak2 server
Couldnt find server_linux

aber die datei ist vorhanden und hatt auch rechte

D@rk-€vil™ 18.11.2010 11:40

Zitat:

Zitat von Lex (Beitrag 64416)
Nicht nur!!! Wenn du die Berechtigungen für deinen TS3 nicht richtig einstellst
kann es auch zu dieser Fehlermeldung kommen.
Infoformationen dazu gibts hier => NetVision-Technik

Lg Lex


Dieses ist nicht mehr richtig zu gebrauchen, da sich das Rechte System beim TS3 geändert hat^^

dienr2 08.03.2011 09:28

Hab schon wieder den fehler !!

Manchmal zeigt er das ts3 an aber meistens steht da nur :

TS3 Server returned the following error: Welcome to the TeamSpeak 3 ServerQuery interface, type "help" for a list of commands and "help " for information on a specific command. error id=3329 msg=connection failed, you are banned extra_msg=you may retry in 373 seconds

Aber es ist alles eingetragen und so

wagaman 08.03.2011 10:43

du hast deine rechte falsch gesetzt ,so das man nichts sieht

stell die rechte für guest richtig ein,so das sie auch etwas sehen dürfen

sind nur 3 kleine häckchen die du setzen must^^.

dienr2 08.03.2011 11:44

ähh mal ne dowe frage wo bekomme ich nochmal den berechtigungsschlüssel her ?

weil ich bin blos Gast im ts komischerweise

Sponge 08.03.2011 11:48

Wenn du das TS installierst bekommst du nen SA-Token/Schlüssel - wenn du dir den nicht notiert hast siehts glaub ich nicht so gut aus.

dienr2 08.03.2011 12:01

lol finde den net ; )

Bluesteel 08.03.2011 12:02

dann ts deinstallieren und neu installieren und dabei schlüssel notieren der simpelste weg

wagaman 08.03.2011 12:03

beim erstellen hast du doch ein token bekommen der dich zum serveradmin macht

den hättest du dir merken oder kopieren sollen,und im ts nutzen

------------------------

jemand war schneller^^

aber du kannst auch bei dir im log den schlüssel sehen, im teamspeak/log/

im ersten log müste dein token stehen

aber dann fehln dir immer noch serveramdmin zugang +pw

also am besten alles neu aufsetzen^^

dienr2 08.03.2011 12:05

hmm werd ich wohl machen müssen. thx

D@rk-€vil™ 08.03.2011 12:10

server logs rein schauen, da steht der immer als sicherheit drinne, aber nur in der ersten log!

lg

dienr2 08.03.2011 12:20

hab den schlüssel gefunden in der token guid allerdings wenn ich den eingeben will kommt der fehler das er falsch ist oder Schon mal Benutzt wurde

Bluesteel 08.03.2011 12:37

also doch neu install

Stifler 08.03.2011 13:05

Neuinstallieren
Aufschreiben
Verwenden
10 Backup Schlüssel erstellen, die kannst du dann aus der DB rausholen oder noch besser benutz TS3WebAdmin!

BlackJack 08.03.2011 13:08

--------------------------------------------------------
ServerAdmin privilege key created, please use the line below
token=c37MS5OpVzfySUeTHFr7Hj9HlzVSahDUZvKeS9R2
--------------------------------------------------------
darauf musst du achten ^^

dienr2 08.03.2011 13:20

joa aber den kann man nur einmal benutzen hab ich gemerkt ; )

Stifler 08.03.2011 13:22

Ja, den Berechtigungsschlüssel kann man nur einmal benutzen bei TS3, Das Identitäten System ist zwar etwas Komplizierter aber offensichtlich auch sicherer!

BlackJack 08.03.2011 13:22

ja neu machen, ist ja nicht viel arbeit ;)

Bluesteel 08.03.2011 13:53

aber pass auf wenn du den schlüssel nur einmal nutzen kannst nich das de dir wieder die rechte nimmst deswegen nutze ts3 webmin da haste dann ne gute admin oberfläche

dienr2 08.03.2011 14:12

wo bekomm ich das her der link den es hier gibt funzt nicht bzw. dort kann mann es nicht mehr laden

wagaman 08.03.2011 14:26

@ dienr2

schreib mich ma an,dann regeln wir das,und mit dem Viewer auch

Stifler 08.03.2011 14:27

GIb im Google "Teamspeak 3 Web Interface" ein!

Bringt aber auch net viel wennst keine Admin Rechte hast!

dienr2 08.03.2011 17:48

Funzt alles THX



--======================================--
--==
Beitrag erstellt: 18:48 um 16:48 ==--
--==
geantwortet auf Beitrag vom ==--
--== automatische Beitragszusammenführung ==--
--======================================--


dienr2 schrieb nach 1 Stunde, 59 Minuten und 50 Sekunden:

Hab alles neu gemacht so das es funzt jetzt ist das problem sobald ich den ts3 server Starte geht der tracker nicht mehr bzw. die server last ist bei 98,3 - 100%

wie geht das ?

Stifler 08.03.2011 17:55

Liegt womöglich am TS(3)Viewer! Deaktiviere/Konfiguriere den mal dann wirds klappen!

Beim TS3Server müssen in der Gast Gruppe folgende Rechte aktiviert sein.

serverinfo(b_virtualserver_info_view)
channelgrouplist (b_virtualserver_channelgroup_list)
servergrouplist (b_virtualserver_servergroup_list)
clientlist (b_virtualserver_client_list)
channellist (b_virtualserver_channel_list)

dienr2 08.03.2011 18:04

ist alles richtig. trotzdem der fehler

Stifler 08.03.2011 18:09

Welchen ts3viewer verwendest du?

dienr2 08.03.2011 18:16

TSStatus: Teamspeak 3 viewer for php5

Changelog
---------

23/12/09:

- work with BETA 5 servers
- added a decodeUTF8 method for specials chars

26/12/09
- tested with severs BETA 3,5,6,7,8
- first release of the TSStatus generator script
- added a new property, showNicknameBox, to show/hide the nickname box
- improved error messages. sockets and Teamspeak servers errors are now displayed with the error message and error number
- added a timeout property for connect, read, write operations
- properly disconnect from server and send the quit message
- code cleanup

steht in der README

Stifler 08.03.2011 18:24

Da gibt es eine 2010er Version .. Die Aktuelle TS3 Beta hat die Zahl 30, und bei den versch. Betas wurde viel rumexperimentiert so dass ich glaube dass diese Version des TS3Viewers nicht mehr mit der deines Servers kompatibel ist.

Bei mir hatte ich mit der 2009er auch eine riesen CPU Auslastung und mit der 2010er keine mehr!

wagaman 08.03.2011 18:26

kann dir nur empfehlen einen anderen zu nehmen und den auch entweder mit klappe versehen oder als popup zu machen,

oder deinen jetzigen ma so ausprobieren,also klappe oder popup

dienr2 10.03.2011 20:04

möschte mir einer mal seinen geben ; ) weil bei allen die ich jetzt ausprobiert habe ist der selbe fehler.

Sponge 10.03.2011 20:46

Aber du weisst schon das bei jedem der das installiert nen individueller SA-Schlüssel erstellt wird ne?
Also nix mit von anderen den nehmen!
Neu installen und gut....

dienr2 12.03.2011 04:21

joa hab ich schon par mal ; )

so wenn ich den ts3 server starte funzt es die seite läuft auch flüssig.

Aber sobald ich den Viewer reinbaue aufm tracker lädt der tracker nicht mehr. wie bekomme ich das weg ? hab schon mehrere viewer ausprobiert

Stifler 12.03.2011 09:20

Kuck mal im viewer nach was er für cmds schickt (serverinfo, channellist) ect und das musst du bei deinem teamspeakserver einstellen.

was ich festgestellt habe ist das manche ts3 viewer ein falsches Errorhandling haben.

in der funktion sendCommand z.B gehört korrekterweise

PHP-Code:

    if(!strpos($response"error id=0")) {
        
$this->error "TS3 Server returned the following error: " $this->unescape(trim($response));
        return 
false;
        } 

und bei update()

PHP-Code:

$lines explode("\n\rerror id=0 msg=ok\n\r"$response); 

queryserver()

PHP-Code:

        $this->_socket = @fsockopen($this->_host$this->_qport$errno$errstr1); 

und


PHP-Code:

@socket_set_timeout($this->_socket1);

            if(
trim(@fgets($this->_socket)) != "TS3") {
            
$this->error "Not a Teamspeak 3 Server - Bad Query Port";
            return 
false;
            } 

stell mal deinen tsviewer hier rein und wir schauen uns das an!

dienr2 12.03.2011 17:56

Also in meiner block_ts3_ansicht.php (die links im menü angezeigt wird da ich es mit blöcken hab )

hab ich stehn

PHP-Code:

<?
////////////////////////////////////////
//      Blocks vom Linken Menü       //
//////////////////////////////////////
//      TS 3 Ansicht               //
////////////////////////////////////
?>

<html>
<head>
<title>TSStatus</title>
<link rel="stylesheet" type="text/css" href="/tsstatus/tsstatus.css" />
<script type="text/javascript" src="/tsstatus/tsstatus.js"></script>
</head>
<body>

<?php
require_once("/dt/trackerv2/xyz/tsstatus/tsstatus.php");
$tsstatus = new TSStatus("URLBZW.IP"100111);
$tsstatus->imagePath "/tsstatus/img/";
$tsstatus->showNicknameBox true;
$tsstatus->decodeUTF8 true;
$tsstatus->timeout 2;
echo 
$tsstatus->render();
?>

</body>
</html>

und die tsstatus.php

PHP-Code:

<?php 


class TSStatus
{
    private 
$_host;
    private 
$_qport;
    private 
$_sid;
    private 
$_socket;
    private 
$_updated;
    private 
$_serverDatas;
    private 
$_channelDatas;
    private 
$_userDatas;
    private 
$_serverGroupFlags;
    private 
$_channelGroupFlags;
    
    public 
$imagePath;
    public 
$decodeUTF8;
    public 
$showNicknameBox;
    public 
$timeout;
    
    public function 
TSStatus($host$queryPort$serverId)
    {
        
$this->_host $host;
        
$this->_qport $queryPort;
        
$this->_sid $serverId;
        
        
$this->_socket null;    
        
$this->_updated false;
        
$this->_serverDatas = array();
        
$this->_channelDatas = array();
        
$this->_userDatas = array();
        
$this->_serverGroupFlags = array();
        
$this->_channelGroupFlags = array();
        
        
$this->imagePath "img/";
        
$this->decodeUTF8 false;
        
$this->showNicknameBox true;
        
$this->timeout 2;
        
        
$this->setServerGroupFlag(6'servergroup_300.png');
        
$this->setChannelGroupFlag(5'changroup_100.png');
        
$this->setChannelGroupFlag(6'changroup_200.png');
    }
    
    private function 
unescape($str)
    {
        
$find = array('\\\\',     "\/",         "\s",         "\p",         "\a",     "\b",     "\f",         "\n",         "\r",     "\t",     "\v");
        
$rplc = array(chr(92),    chr(47),    chr(32),    chr(124),    chr(7),    chr(8),    chr(12),    chr(10),    chr(3),    chr(9),    chr(11));
        
        return 
str_replace($find$rplc$str);
    }
    
    private function 
parseLine($rawLine)
    {
        
$datas = array();
        
$rawItems explode("|"$rawLine);
        foreach (
$rawItems as $rawItem)
        {
            
$rawDatas explode(" "$rawItem);
            
$tempDatas = array();
            foreach(
$rawDatas as $rawData)
            {
                
$ar explode("="$rawData2);
                
$tempDatas[$ar[0]] = isset($ar[1]) ? $this->unescape($ar[1]) : "";
            }
            
$datas[] = $tempDatas;
        }
        return 
$datas;
    }
    
    private function 
sendCommand($cmd)
    {
        
fputs($this->_socket"$cmd\n");
        
$response "";
        do
        {
            
$response .= fread($this->_socket8096);
        }while(
strpos($response'error id=') === false);
        
        if(
strpos($response"error id=0") === false)
        {
            throw new 
Exception("TS3 Server returned the following error: " $this->unescape(trim($response)));
        }
        
        return 
$response;
    }
    
    private function 
queryServer()
    {
        
$this->_socket = @fsockopen($this->_host$this->_qport$errno$errstr$this->timeout);
        if(
$this->_socket)
        {
            @
socket_set_timeout($this->_socket$this->timeout);
            
$isTs3 trim(fgets($this->_socket)) == "TS3";
            if(!
$isTs3) throw new Exception("Not a Teamspeak 3 server/bad query port");

            
$response "";
            
$response .= $this->sendCommand("use sid=" $this->_sid);
            
$response .= $this->sendCommand("serverinfo");
            
$response .= $this->sendCommand("channellist -topic -flags -voice -limits");
            
$response .= $this->sendCommand("clientlist -uid -away -voice -groups");

            
$this->disconnect();
            
            if(
$this->decodeUTF8$response utf8_decode($response);
            
            return 
$response;
        }
        else throw new 
Exception("Socket error: $errstr [$errno]");
    }
    
    private function 
disconnect()
    {
        @
fputs($this->_socket"quit\n");
        @
fclose($this->_socket);
    }
    
    private function 
sortUsers($a$b)
    {
        return 
strcasecmp($a["client_nickname"], $b["client_nickname"]);
    }
    
    private function 
update()
    {
        
$response $this->queryServer();
        
        
$lines explode("error id=0 msg=ok\n\r"$response);
        if(
count($lines) == 5)
        {
            
$this->_serverDatas $this->parseLine($lines[1]);
            
$this->_serverDatas $this->_serverDatas[0];

            
$this->_channelDatas $this->parseLine($lines[2]);
            
$this->_userDatas $this->parseLine($lines[3]);
            
usort($this->_userDatas, array($this"sortUsers"));

            
$this->_updated true;
        }
        else 
$this->error "Invalid server response";
        
    }
    
    private function 
renderFlags($flags)
    {
        
$out "";
        foreach (
$flags as $flag$out .= '<img src="' $this->imagePath $flag '" />';
        return 
$out;
    }

    private function 
renderUsers($parentId)
    {
        
$out "";
        foreach(
$this->_userDatas as $user)
        {
            if(
$user["client_type"] == && $user["cid"] == $parentId)
            {
                
$icon "16x16_player_off.png";
                if(
$user["client_away"] == 1$icon "16x16_away.png";
                else if(
$user["client_flag_talking"] == 1$icon "16x16_player_on.png";
                else if(
$user["client_output_hardware"] == 0$icon "16x16_hardware_output_muted.png";
                else if(
$user["client_output_muted"] == 1$icon "16x16_output_muted.png";
                else if(
$user["client_input_hardware"] == 0$icon "16x16_hardware_input_muted.png";
                else if(
$user["client_input_muted"] == 1$icon "16x16_input_muted.png";
                
                
$flags = array();
                if(isset(
$this->_channelGroupFlags[$user["client_channel_group_id"]])) $flags[] = $this->_channelGroupFlags[$user["client_channel_group_id"]];
                
$serverGroups explode(","$user["client_servergroups"]);
                foreach (
$serverGroups as $serverGroup) if(isset($this->_serverGroupFlags[$serverGroup])) $flags[] = $this->_serverGroupFlags[$serverGroup];
                
                
$out .= '
                <div class="tsstatusItem">
                    <div class="tsstatusLabel">
                        <img src="' 
$this->imagePath $icon '" />' $user["client_nickname"] . '
                    </div>
                    <div class="tsstatusFlags">
                        ' 
$this->renderFlags($flags) . '
                    </div>
                </div>'
;
            }
        }
        return 
$out;
    }
    
    private function 
renderChannels($parentId)
    {
        
$out "";
        foreach (
$this->_channelDatas as $channel)
        {
            if(
$channel["pid"] == $parentId)
            {
                
$icon "16x16_channel_green.png";
                if( 
$channel["channel_maxclients"] > -&& ($channel["total_clients"] >= $channel["channel_maxclients"])) $icon "16x16_channel_red.png";
                else if( 
$channel["channel_maxfamilyclients"] > -&& ($channel["total_clients_family"] >= $channel["channel_maxfamilyclients"])) $icon "16x16_channel_red.png";
                else if(
$channel["channel_flag_password"] == 1$icon "16x16_channel_yellow.png";
                
                
$flags = array();
                if(
$channel["channel_flag_default"] == 1$flags[] = '16x16_default.png';
                if(
$channel["channel_needed_talk_power"] > 0$flags[] = '16x16_moderated.png';
                if(
$channel["channel_flag_password"] == 1$flags[] = '16x16_register.png';

                
$link "javascript:tsstatusconnect('" $this->_host "','" $this->_serverDatas["virtualserver_port"] . "','" htmlentities($channel["channel_name"]) . "')";
                
                
$out .= '
                <div class="tsstatusItem">
                    <div class="tsstatusLabel">
                        <a href="' 
$link '">
                            <img src="' 
$this->imagePath $icon '" />' $channel["channel_name"] . '
                        </a>
                    </div>
                    <div class="tsstatusFlags">
                        ' 
$this->renderFlags($flags) . '
                    </div>
                    ' 
. (count($this->_userDatas) > $this->renderUsers($channel["cid"]) : '') . $this->renderChannels($channel["cid"]) . '
                </div>'
;
            }
        }
        return 
$out;
    }
    
    private function 
renderNickNameBox()
    {
        
$cookieName "tsstatus_" str_replace(".""_"$this->_host);
        
$nickname = isset($_COOKIE[$cookieName]) ? $_COOKIE[$cookieName] : "";
        
$out '<div class="tsstatusNickname">Nickname: <input type="text" id="tsstatusNick" value="' $nickname '" /></div>';
        return 
$out;
    }
    
    public function 
clearServerGroupFlags()
    {
        
$this->_serverGroupFlags = array();
    }
    
    public function 
setServerGroupFlag($serverGroupId$image)
    {
        
$this->_serverGroupFlags[$serverGroupId] = $image;
    }
    
    public function 
clearChannelGroupFlags()
    {
        
$this->_channelGroupFlags = array();
    }
    
    public function 
setChannelGroupFlag($channelGroupId$image)
    {
        
$this->_channelGroupFlags[$channelGroupId] = $image;
    }
    
    public function 
render()
    {
        try
        {
            
$out '<div class="tsstatus">' "\n";
            
$this->update();
        
            if (
$this->showNicknameBox$out .= $this->renderNickNameBox();
            
$out .= '<div class="tsstatusServerName"><a href="javascript:tsstatusconnect(\'' $this->_host "','" $this->_serverDatas["virtualserver_port"] . '\')"><img src="' $this->imagePath '16x16_server_green.png" />' $this->_serverDatas["virtualserver_name"] . "</a></div>\n";
            if(
count($this->_channelDatas) > 0$out .= $this->renderChannels(0);
            
$out .= "</div>\n";
        }
        catch (
Exception $ex)
        {
            
$this->disconnect();
            
$out '<div class="tsstatuserror">' $ex->getMessage() . '</div>';
        }
        return 
$out;        
    }
}

?>


Stifler 12.03.2011 18:26

So:

PHP-Code:

<?php 


class TSStatus
{
    private 
$_host;
    private 
$_qport;
    private 
$_sid;
    private 
$_socket;
    private 
$_updated;
    private 
$_serverDatas;
    private 
$_channelDatas;
    private 
$_userDatas;
    private 
$_serverGroupFlags;
    private 
$_channelGroupFlags;
    
    public 
$imagePath;
    public 
$decodeUTF8;
    public 
$showNicknameBox;
    public 
$timeout;
    
    public function 
TSStatus($host$queryPort$serverId)
    {
        
$this->_host $host;
        
$this->_qport $queryPort;
        
$this->_sid $serverId;
        
        
$this->_socket null;    
        
$this->_updated false;
        
$this->_serverDatas = array();
        
$this->_channelDatas = array();
        
$this->_userDatas = array();
        
$this->_serverGroupFlags = array();
        
$this->_channelGroupFlags = array();
        
        
$this->imagePath "img/";
        
$this->decodeUTF8 false;
        
$this->showNicknameBox true;
        
$this->timeout 2;
        
        
$this->setServerGroupFlag(6'servergroup_300.png');
        
$this->setChannelGroupFlag(5'changroup_100.png');
        
$this->setChannelGroupFlag(6'changroup_200.png');
    }
    
    private function 
unescape($str)
    {
        
$find = array('\\',     "\/",         "\s",         "\p",         "\a",     "\b",     "\f",         "\n",         "\r",     "\t",     "\v");
        
$rplc = array(chr(92),    chr(47),    chr(32),    chr(124),    chr(7),    chr(8),    chr(12),    chr(10),    chr(3),    chr(9),    chr(11));
        
        return 
str_replace($find$rplc$str);
    }
    
    private function 
parseLine($rawLine)
    {
        
$datas = array();
        
$rawItems explode("|"$rawLine);
        foreach (
$rawItems as $rawItem)
        {
            
$rawDatas explode(" "$rawItem);
            
$tempDatas = array();
            foreach(
$rawDatas as $rawData)
            {
                
$ar explode("="$rawData2);
                
$tempDatas[$ar[0]] = isset($ar[1]) ? $this->unescape($ar[1]) : "";
            }
            
$datas[] = $tempDatas;
        }
        return 
$datas;
    }
    
    private function 
sendCommand($cmd)
    {
        
fputs($this->_socket"$cmd\n");
        
$response "";
        
        while(
strpos($response"error id=") === false) {
        
$response .= @fread($this->_socket8096);
        }
        
        if(
strpos($response"error id=0") === false)
        {
            throw new 
Exception("TS3 Server returned the following error: " $this->unescape(trim($response)));
        }
        
        return 
$response;
    }
    
    private function 
queryServer()
    {
        
$this->_socket = @fsockopen($this->_host$this->_qport$errno$errstr$this->timeout);
        if(
$this->_socket)
        {
            @
socket_set_timeout($this->_socket$this->timeout);
            
$isTs3 trim(fgets($this->_socket)) == "TS3";
            if(!
$isTs3) throw new Exception("Not a Teamspeak 3 server/bad query port");

            
$response "";
            
$response .= $this->sendCommand("use sid=" $this->_sid);
            
$response .= $this->sendCommand("serverinfo");
            
$response .= $this->sendCommand("channellist -topic -flags -voice -limits");
            
$response .= $this->sendCommand("clientlist -uid -away -voice -groups");

            
$this->disconnect();
            
            if(
$this->decodeUTF8$response utf8_decode($response);
            
            return 
$response;
        }
        else throw new 
Exception("Socket error: $errstr [$errno]");
    }
    
    private function 
disconnect()
    {
        @
fputs($this->_socket"quit\n");
        @
fclose($this->_socket);
    }
    
    private function 
sortUsers($a$b)
    {
        return 
strcasecmp($a["client_nickname"], $b["client_nickname"]);
    }
    
    private function 
update()
    {
        
$response $this->queryServer();
        
    
$lines explode("\n\rerror id=0 msg=ok\n\r"$response);
        if(
count($lines) == 5)
        {
            
$this->_serverDatas $this->parseLine($lines[1]);
            
$this->_serverDatas $this->_serverDatas[0];

            
$this->_channelDatas $this->parseLine($lines[2]);
            
$this->_userDatas $this->parseLine($lines[3]);
            
usort($this->_userDatas, array($this"sortUsers"));

            
$this->_updated true;
        }
        else 
$this->error "Invalid server response";
        
    }
    
    private function 
renderFlags($flags)
    {
        
$out "";
        foreach (
$flags as $flag$out .= '<img src="' $this->imagePath $flag '" />';
        return 
$out;
    }

    private function 
renderUsers($parentId)
    {
        
$out "";
        foreach(
$this->_userDatas as $user)
        {
            if(
$user["client_type"] == && $user["cid"] == $parentId)
            {
                
$icon "16x16_player_off.png";
                if(
$user["client_away"] == 1$icon "16x16_away.png";
                else if(
$user["client_flag_talking"] == 1$icon "16x16_player_on.png";
                else if(
$user["client_output_hardware"] == 0$icon "16x16_hardware_output_muted.png";
                else if(
$user["client_output_muted"] == 1$icon "16x16_output_muted.png";
                else if(
$user["client_input_hardware"] == 0$icon "16x16_hardware_input_muted.png";
                else if(
$user["client_input_muted"] == 1$icon "16x16_input_muted.png";
                
                
$flags = array();
                if(isset(
$this->_channelGroupFlags[$user["client_channel_group_id"]])) $flags[] = $this->_channelGroupFlags[$user["client_channel_group_id"]];
                
$serverGroups explode(","$user["client_servergroups"]);
                foreach (
$serverGroups as $serverGroup) if(isset($this->_serverGroupFlags[$serverGroup])) $flags[] = $this->_serverGroupFlags[$serverGroup];
                
                
$out .= '
                <div class="tsstatusItem">
                    <div class="tsstatusLabel">
                        <img src="' 
$this->imagePath $icon '" />' $user["client_nickname"] . '
                    </div>
                    <div class="tsstatusFlags">
                        ' 
$this->renderFlags($flags) . '
                    </div>
                </div>'
;
            }
        }
        return 
$out;
    }
    
    private function 
renderChannels($parentId)
    {
        
$out "";
        foreach (
$this->_channelDatas as $channel)
        {
            if(
$channel["pid"] == $parentId)
            {
                
$icon "16x16_channel_green.png";
                if( 
$channel["channel_maxclients"] > -&& ($channel["total_clients"] >= $channel["channel_maxclients"])) $icon "16x16_channel_red.png";
                else if( 
$channel["channel_maxfamilyclients"] > -&& ($channel["total_clients_family"] >= $channel["channel_maxfamilyclients"])) $icon "16x16_channel_red.png";
                else if(
$channel["channel_flag_password"] == 1$icon "16x16_channel_yellow.png";
                
                
$flags = array();
                if(
$channel["channel_flag_default"] == 1$flags[] = '16x16_default.png';
                if(
$channel["channel_needed_talk_power"] > 0$flags[] = '16x16_moderated.png';
                if(
$channel["channel_flag_password"] == 1$flags[] = '16x16_register.png';

                
$link "javascript:tsstatusconnect('" $this->_host "','" $this->_serverDatas["virtualserver_port"] . "','" htmlentities($channel["channel_name"]) . "')";
                
                
$out .= '
                <div class="tsstatusItem">
                    <div class="tsstatusLabel">
                        <a href="' 
$link '">
                            <img src="' 
$this->imagePath $icon '" />' $channel["channel_name"] . '
                        </a>
                    </div>
                    <div class="tsstatusFlags">
                        ' 
$this->renderFlags($flags) . '
                    </div>
                    ' 
. (count($this->_userDatas) > $this->renderUsers($channel["cid"]) : '') . $this->renderChannels($channel["cid"]) . '
                </div>'
;
            }
        }
        return 
$out;
    }
    
    private function 
renderNickNameBox()
    {
        
$cookieName "tsstatus_" str_replace(".""_"$this->_host);
        
$nickname = isset($_COOKIE[$cookieName]) ? $_COOKIE[$cookieName] : "";
        
$out '<div class="tsstatusNickname">Nickname: <input type="text" id="tsstatusNick" value="' $nickname '" /></div>';
        return 
$out;
    }
    
    public function 
clearServerGroupFlags()
    {
        
$this->_serverGroupFlags = array();
    }
    
    public function 
setServerGroupFlag($serverGroupId$image)
    {
        
$this->_serverGroupFlags[$serverGroupId] = $image;
    }
    
    public function 
clearChannelGroupFlags()
    {
        
$this->_channelGroupFlags = array();
    }
    
    public function 
setChannelGroupFlag($channelGroupId$image)
    {
        
$this->_channelGroupFlags[$channelGroupId] = $image;
    }
    
    public function 
render()
    {
        try
        {
            
$out '<div class="tsstatus">' "\n";
            
$this->update();
        
            if (
$this->showNicknameBox$out .= $this->renderNickNameBox();
            
$out .= '<div class="tsstatusServerName"><a href="javascript:tsstatusconnect(\'' $this->_host "','" $this->_serverDatas["virtualserver_port"] . '\')"><img src="' $this->imagePath '16x16_server_green.png" />' $this->_serverDatas["virtualserver_name"] . "</a></div>\n";
            if(
count($this->_channelDatas) > 0$out .= $this->renderChannels(0);
            
$out .= "</div>\n";
        }
        catch (
Exception $ex)
        {
            
$this->disconnect();
            
$out '<div class="tsstatuserror">' $ex->getMessage() . '</div>';
        }
        return 
$out;        
    }
}

?>



Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 Uhr.

Powered by vBulletin® Version 3.8.9 (Deutsch)
Copyright ©2000 - 2025, vBulletin Solutions, Inc.