Ver Mensaje Individual
  #12 (permalink)  
Antiguo 20/06/2011, 21:06
Avatar de FaNaTyCk
FaNaTyCk
 
Fecha de Ingreso: enero-2008
Mensajes: 54
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: if timeout else?, posible?

Cita:
Iniciado por Patriarka Ver Mensaje
esta bien pero ya estaba cargado en una variable hizo todo confuso
Ahora que has atado todos los cabos, se te ocurre alguna solución a tí o a alguien?..

Mi código actual:

Código PHP:
error_reporting(0);
set_time_limit(2);

require(
"class.php"); 

$serverip "ip:puerto"// Ejemplo: 127.0.0.1:44405

$ip_port = array(
                
=> "".$serverip.""
                
);

$rand       rand(1count($ip_port));         
$getip_port explode(":"$ip_port[$rand]);    
$ip     = (empty($_POST["ip"]))   ? $getip_port[0] : $_POST["ip"];
$port   = (empty($_POST["port"])) ? $getip_port[1] : $_POST["port"];

$s = new serverinfo($ip$port);
$s->getServerData();
$s->getPlayerData();

echo 
$s->serverData['players']; 
class que uso (no es mía y no se modificarla tampoco):
Código PHP:
class serverinfo
{
    var 
$ip;
    var 
$port;
   
    var 
$fp;
    var 
$timeout;
   
    var 
$serverData;
    var 
$playerData;


    function 
serverinfo($ip$port$timeout 3)
    {
        
$this->ip       $ip;
        
$this->port     $port;
       
        
$this->fp       fsockopen("udp://" $ip$port);
        
$this->timeout  $timeout;
    }


    function 
getServerData()
    {
        
$this->writeData($this->getQuery("A2S_INFO"));
       
        
$this->getData("byte");
        
$this->getString();
        
$this->serverData['hostname']   = $this->getString();
        
$this->serverData['map']        = $this->getString();
        
$this->getString();
        
$this->serverData['mod']        = $this->getString();
        
$this->serverData['players']    = $this->getData("byte");
        
$this->serverData['maxplayers'] = $this->getData("byte");
        
$this->getData("byte");
        
$this->serverData['servertype'] = (chr($this->getData("byte")) == "d") ? "Dedicated" "Listen";
        
$this->serverData['server_os']  = (chr($this->getData("byte")) == "w") ? "Windows" "Linux";
        
$this->serverData['password']       = $this->getData("byte");
        
$this->getData("byte");
        
$this->getString();
        
$this->getString();
        
$this->getString();
        
$this->getData("long");
        
$this->getData("long");
        
$this->getData("byte");
        
$this->getData("byte");
        
$this->serverData['vac']        = $this->getData("byte");
        
$this->getData("byte");
    }
   
   
    function 
getPlayerData()
    {
        
$this->writeData($this->getQuery("A2S_PLAYER"));
       
        
fread($this->fp4);
        
$this->getData("byte");
       
        
$count $this->getData("byte");
       
        for(
$i 0$i $count$i++)
        {
            
$this->playerData[$i]['id']     = $this->getData("byte");
            
$this->playerData[$i]['name']   = $this->getString();
            
$this->playerData[$i]['frags']  = $this->getData("long");
            
$this->playerData[$i]['time']   = round($this->getData("float"));
        }
    }


    function 
getQuery($queryType)
    {
        switch(
$queryType)
        {
            case 
"A2S_SERVERQUERY_GETCHALLENGE":
                return 
"\xFF\xFF\xFF\xFF\x57";
                break;

            case 
"A2S_INFO":
                return 
"\xFF\xFF\xFF\xFFTSource Engine Query\x00";
                break;

            case 
"A2S_PLAYER":
                return 
sprintf("\xFF\xFF\xFF\xFFU%s"$this->getChallenge());
                break;
        }
    }


    function 
getChallenge()
    {
        
$this->writeData($this->getQuery("A2S_SERVERQUERY_GETCHALLENGE"));
       
        return 
substr(fread($this->fp16), 59);
    }


    function 
getData($type)
    {
        switch(
$type)
        {
            case 
"long":
                
$data unpack("L"fread($this->fp4));
                return 
$data[1];
                break;

            case 
"byte":
                return 
ord(fread($this->fp1));
                break;

            case 
"char":
                return 
fread($this->fp1);
                break;

            case 
"float":
                
$data unpack("F"fread($this->fp4));
                return 
$data[1];
                break;
        }
    }


    function 
getString()
    {
        
$string '';
        
$loop   TRUE;
       
        while(
$loop)
        {
            
$_fp $this->getData("char");

            if( 
ord($_fp) != )
            {
                
$string .= $_fp;
            }
            else { 
$loop FALSE; }
        }
       
        return 
$string;
    }


    function 
writeData($input)
    {
        if( !
$this->fp )
        {
            exit(
"Error: Couldn't connect to server.");
        }
        else {
            
fwrite($this->fp$input);
            
socket_set_timeout($this->fp$this->timeout);
        }
    }


    function 
setTimeFormat($format$input)
    {
        
$hours floor($input 3600);
        
$input $input 3600;

        
$minutes floor($input 60);
        
$input $input 60;

        
$seconds round($input);

        return 
sprintf($format$hours$minutes$seconds);
    }


    function 
sortPlayers($sort "time"$type "desc")
    {
        if(isset(
$this->playerData[0][$sort]))
        {
            for(
$i 0$i count($this->playerData); $i++)
            {
                
$temp[] = $this->playerData[$i][$sort];
            }

            switch(
$sort)
            {
                case 
"name":
                    
uasort($temp"strcasecmp");
                    break;
               
                default:
                    if(
$type == "desc") {
                        
arsort($temp);
                    }
                    elseif(
$type == "asc") {
                        
asort($temp);
                    }
                    break;
            }

            foreach(
$temp as $key => $value)
            {
                
$keys[] = $key;
            }

            foreach(
$keys AS $k => $v)
            {
                
$tempvar[$k]['id']     = $this->playerData[$v]['id'];
                
$tempvar[$k]['name']   = $this->playerData[$v]['name'];
                
$tempvar[$k]['frags']  = $this->playerData[$v]['frags'];
                
$tempvar[$k]['time']   = $this->playerData[$v]['time'];
            }

            
$this->playerData $tempvar;
        }
    }