Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class Q3Query
- {
- const packet_prefix = "\xff\xff\xff\xff";
- public function remoteConsole ($Ip, $Port = 28960, $Pw = "Test", $Msg = "status")
- {
- try{
- if(($this->Socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)) === FALSE){
- throw new Exception('Unable to create socket: '. socket_strerror(socket_last_error()) . PHP_EOL);
- }
- socket_set_option($this->Socket, SOL_SOCKET, SO_RCVTIMEO, array('sec'=>1, 'usec'=>0));
- socket_set_option($this->Socket, SOL_SOCKET, SO_SNDTIMEO, array('sec'=>1, 'usec'=>0));
- $msg = self::packet_prefix . "rcon \"" . $Pw . "\" " . $Msg;
- $msglen = strlen($msg);
- if(@socket_sendto($this->Socket, $msg, $msglen, 0, $Ip, $Port) === FALSE){
- throw new Exception('An error occured while writing to the server.');
- }
- if((@socket_recvfrom($this->Socket, $data, 8129, 0, $Ip, $Port)) === FALSE){
- throw new Exception('Gameserver timed out.');
- }
- socket_close($this->Socket);
- $this->data = $data;
- } catch (Exception $e) {
- echo 'Caught exception: ', $e->getMessage(), "\n";
- return(-1);
- }
- }
- public function getStatus ($Ip, $Port = 28960)
- {
- try{
- if(($this->Socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)) === FALSE){
- throw new Exception('Unable to create socket: '. socket_strerror(socket_last_error()) . PHP_EOL);
- }
- socket_set_option($this->Socket, SOL_SOCKET, SO_RCVTIMEO, array('sec'=>1, 'usec'=>0));
- socket_set_option($this->Socket, SOL_SOCKET, SO_SNDTIMEO, array('sec'=>1, 'usec'=>0));
- $msg = self::packet_prefix . "getstatus\n";
- $msglen = strlen($msg);
- if(@socket_sendto($this->Socket, $msg, $msglen, 0, $Ip, $Port) === FALSE){
- throw new Exception('Gameserver timed out.');
- }
- if((@socket_recvfrom($this->Socket, $data, 8129, 0, $Ip, $Port)) === FALSE){
- throw new Exception('An error occured while reading from the server.');
- }
- socket_close($this->Socket);
- $this->data = $data;
- } catch (Exception $e) {
- echo 'Caught exception: ', $e->getMessage(), "\n";
- return(-1);
- }
- }
- public function getStatusStructure($data)
- {
- /*Divides the response into an array
- [0] = prefix, [1] = variables with values (separated by "\"), [2] and greater = playerinfo*/
- $splitdata = explode("\n", $data);
- $vardata = explode("\\", $splitdata[1]);
- $this->vararray=array();
- $varlength = count($vardata);
- //First element in vardata is a whitespace, skipping it
- for($key=1, $value=2; $key<$varlength, $value<$varlength;$key=$key+2, $value=$value+2){
- $this->vararray[$vardata[$key]] = $vardata[$value];
- }
- $this->playerarray = array();
- for($x=2, $c = 0;$x < (count($splitdata)-1); $x++, $c++){//Last element is a whitespace
- $player = explode(" ", $splitdata[$x]);
- $name = implode(" ", array_slice($player, 2)); //This is just silly ._.
- /*
- name = $player[>=2]
- ping = $player[1];
- score = $player[0];*/
- $this->playerarray[$c] = array("name" => $name, "score" => $player[0], "ping" => $player[1]);
- }
- }
- public function remoteConsoleStructure($data){
- $this->splitdata = explode("\n", $data);
- }
- }?>
Advertisement