1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
<?php
class GoldSrcQuery{
const Q_HEADER = "\xFF\xFF\xFF\xFF"; //0xFFFFFFFF;
const A2A_PING = "\x69"; //0x69;
const A2S_INFO = "TSource Engine Query\0";
const A2S_PLAYER = "\x55"; //0x55;
const A2S_RULES = "\x56"; //0x56;
const A2S_SERVERQUERY_GETCHALLENGE = "\xFF\xFF\xFF\xFF\x57"; // challenge
public $socket;
public $latence;
public $connected;
public function __construct($ip, $port, $ip6 = false) {
$this->socket = new SocketUdp($ip, $port, $ip6);
}
public function getChallenge() {
$this->socket->send(self::Q_HEADER.self::A2S_SERVERQUERY_GETCHALLENGE);
$vars=array('byte', 'long');
$r = $this->socket->read($vars);
}
}
class SocketUdp{
public $socket;
public $stream;
public $ip;
public $port;
public $ipv="ipv4"; // ipv4/ipv6
public function __construct($ip, $port, $ip6 = false) {
$this->ip = $ip;
$this->port = $port;
$this->ip6 = $ip6;
if(!isset($this->stream)){
$this->create();
$this->connect();
socket_set_block($this->stream);
}
print_r($this);
}
public function send($cmd){
$packet=socket_write($this->stream, $cmd);
echo $packet;
}
public function connect() {
$true = socket_connect($this->stream, $this->ip, $this->port);
if (!$true) {
echo 'Socket::connect() connection error :(<br />';
}else{
echo "Vous etes connecte au port udp!! <br/>";
}
}
public function create() {
if ($this->ip6 === false) {
$this->stream = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
}else{
$this->stream = socket_create(AF_INET6, SOCK_DGRAM, SOL_UDP);
}
if ($this->stream === false) {
trigger_error('SocketUDP::create init error :(');
}
}
public function read($vars = array()){
$data = socket_read($this->stream, 1);
return $data;
}
}
?> |
Partager