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
| <?php
error_reporting(E_ALL);
//includes divers
set_time_limit (0); // pas de limite dans le temps
$sock = socket_create(AF_INET, SOCK_STREAM, 0); // on cré le socket
socket_bind($sock, $address, $port) or die('Could not bind to address'); /// on ecoute sur le bon port
socket_listen($sock); // on ouvre le socket
Logging("Demarage du serveur");
$clients = Array(); /// le tableau de liste des clients
$con_counter = 0; /// un compteur de connection qui sers de pid (process id)
do { /// on tourne en boucle
// on prepare le tableau de ce qu'il y a à écouter :
$toread=Array();
array_push($toread,$sock);
for ($i=0;$i<count($clients);$i++) { // pour tous les clients
array_push($toread,$clients[$i]["SOCKET"]);
}
$ready = socket_select($toread,$a=null,$a=null,$a=null); // on ecoute sur le tableau
if (in_array($sock, $toread)) { // si l'evenement est sur le socket c'est qu'il y en a un nouveau qui arrive
// on l'ajoute à la liste des clients
$con_counter++;
$cmpt=count($clients);
$clients[$cmpt]["SOCKET"]=socket_accept($sock);
$clients[$cmpt]["PID"]=$con_counter;
$clients[$cmpt]["ID_MEMBRE"]="";
socket_write($clients[$cmpt]["SOCKET"], "conect_accept_true".chr(0));
Logging("Nouvelle connexion : ".$clients[$cmpt]["SOCKET"]." | ".$con_counter);
} else { // c'est un client qui a qq chose a dire
for ($i=0;$i<count($clients);$i++) { // pour tous les clients
if (in_array($clients[$i]["SOCKET"], $toread)) { // si l'evenement est sur ce client
$input = @socket_read($clients[$i]["SOCKET"] , 1024); // on lit le message
if ($input == null) { // y'a rien ce qui veut dire que le client s'est deconnecté
$pid=$clients[$i]["PID"];
Logging("deconnection de ".$clients[$i]["SOCKET"]);
array_splice($clients,$i,1); // on le retire du tableau
$i--;
} elseif (substr_count($input,'[STOP]')>0) {
arret();
break;
} else {
$message = trim($input); // on vire les caracteres inutiles
//on envoie le message reçu à la fonction traitement qui va le traiter :p
traitement($message,$clients[$i]);
Logging("reception de ".$message." from ".$clients[$i]["SOCKET"]);
}
}
}
}
}while (true);
arret();
?> |
Partager