<?php
   class cod 
   {
      private $gamedata;
      public  $error      = false;
      public  $serverip   = '84.244.180.66';
      public  $serverport = 28960;
      public  $player     = Array ();
      public  $score      = Array ();
      public  $ping       = Array ();
      public  $players    = 0;
      public  $errormsg;
      
      
      public function set_ip ($ip, $port, $start = false)
      {
         if (is_numeric (str_replace (".", "", $ip)) && is_numeric ($port))
         {
            $this->serverip   = $ip;
            $this->serverport = $port;
         }
         else
         {
            $this->set_error ("De IP en / of Port is niet geldig.");
         }
         if ($start)
         {
            $this->start ();
         }
      }
      
      
      public function start ()
      {
         if (!empty ($gamedata))
         {
            $this->set_error ("Lees A.U.B. de uitleg onderaan de class.");
         }
         
         $sock = fsockopen ('udp://' . $this->serverip, $this->serverport);
         
            if ($sock && !$this->error)
            {
               fwrite ($sock, 'ÿÿÿÿ getstatus');
               fread  ($sock, 4);
               $status = stream_get_meta_data ($sock);
               
               if ($status['unread_bytes'] == 0) 
               {
                  echo "Error reading status";
                  exit;
               }
               
               $data = explode ("\n", fread ($sock, $status['unread_bytes']));
               array_shift ($data);
               $this->gamedata = explode ("\\", array_shift ($data));
               
               foreach ($data as $i => $player) 
               {
                  preg_match  ('#([0-9]+) ([0-9]+) "(.*)"#', $player, $stat);
                
                  array_shift ($stat);
                  
                  if (!empty ($stat))
                  {
                     $this->score[$i]  = $stat[0];
                     $this->ping[$i]   = $stat[1];
                     $this->player[$i] = $stat[2];
                  }
               }
               
               $this->players = count ($this->player);
            }
            else
            {
               $this->set_error ("Kon niet verbinden met " . $this->serverip . ":" . $this->serverport . "!");
            }
      }
      
      
      public function get_data ($one)
      {
         for ($i = 1; $i < count ($this->gamedata); $i++)
         {
            if ($this->gamedata[$i] == $one)
            {
               return $this->gamedata[$i + 1];
            }
         }
       
        return "Unknown";       
     }
     
     
     private function set_error ($emsg)
     {
        $this->error      = true;
        $this->errormsg   = $emsg;
     }
   }
   
   
   
   /* UITLEG
     
     Zo roepen we de class aan:
       $cod = new cod ();
     
     Daarna zetten we de IP van de server waar we de status van af gaan halen door dat zo te doen:
       $cod->set_ip ("ip", port);
     
     Omdat we kunnen kiezen of de class meteen de informatie van de server moet halen of niet, kunnen we een 3e parameter toevoegen:
       $cod->set_ip ("ip", port, true); // De class haalt meteen de server info op.
     
     Als we de 3e parameter NIET gebruiken, moeten we zelf de class met de server laten verbinden door dat zo te doen:
       $cod->start ();
     
     Als we geen errors voor onze neus krijgen, worden er een aantal vab. gevult met data over de players & server informatie:
       $cod->player;  (Array, bevat alle players op de server.)
       $cod->ping;    (Array, bevat de ping van alle players op de server.)
       $cod->score;   (Array, bevat de score van alle players op de server.)
       $cod->players; (INT, bevat het aantal players op de server.)
     
     Hieronder staat een voorbeeld hoe het eruit zou moeten zien:
   */
   
   
   
   $cod = new cod ();
   
   // Deze functie is nu weggelaten, zodat de class verbinding maakt met een andere CoD server.
   //$cod->set_ip ("0.0.0.0", 0000); 
   
   $cod->start();
   
   
      if (!$cod->error)
      {
         echo "<b>" . $cod->serverip . ":" . $cod->serverport . "</b><br /><br />";
         echo "Player 1 met naam: <b>" . $cod->player[0] . "</b>.<br />";
         echo "Heeft een ping van: <b>" . $cod->ping[0] . "</b>.<br />";
         echo "En z'n score is: <b>" . $cod->score[0] . "</b>.<br /><br />";
         echo "Er zijn(is) <b>" . $cod->players . "</b> player(s) op de server!";
      }
      else
      {
         echo $cod->errormsg;
         exit;
      }
?> 