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
| <?
/*
Presque toutes les propriétés de la classe ont une valeur par défaut
vous pouvez bien entendu les changer dans le script start_chat.php en
spécifiant l'instance de l'objet suivi de la propriété $objet->propriété=valeur.
*/
class Serveur{
//Nombre de connexions concurrentes au maximum
var $max_clients=1;//10;
//Un tableau qui contiendra les ID de sockets de tous les clients connectés
var $clients;//=array();
//La socket "maître" sur laquelle le serveur écoute
var $socket=null;
//Contiendra l'id de chaque nouvelle connexion
var $client=null;
//Contient un message à afficher lorsqu'une connexion est refusée
var $denied;
//0=afficher les infos sur l'écran, 1=enregistrer les log dans un fichier
var $log=0;
//Nom du fichier log où stocker les infos
var $logfile='ChatServerLog.log';
//Ressource du fichier log
var $fp_log;
//Contient l'en-tête html à envoyer à chaque nouveau client
var $html;
//Si un pseudo est déjà pris, envoyer ce message au client avant de refuser sa connexion
var $Already_In_use;
//Type d'info que l'on envoie au(x) client(s)
var $write_type=0;
//Méthode qui démarre le serveur
function Start($address,$port)
{
$this->socket = socket_create(AF_INET, SOCK_STREAM, 0);
//on lie la ressource sur laquelle le serveur va écouter
socket_bind($this->socket, $address, $port) or die($this->destroy(null));
//On prépare l'écoute
socket_listen($this->socket) or die ("Erreur d'Ecoute !");
//Boucle infinie car le serveur ne doit s'arrêter que si on lui demande
while(true)
{
//Le code se bloque jusqu'à ce qu'une nouvelle connexion cliente est établie
//echo "Attente...<br/>";
$this->client=socket_accept($this->socket);
//Lors d'une connexion, le code reprend ici, il est temps de lire ce qu'on nous envoie
//echo "Lecture...<br/>";
$this->read_write($this->client);
}
}
//Cette méthode lit les données reçues par un client
function read_write()
{
//L'en-tête fait 3 bytes, donc on lit 3 bytes et on vérifie s'il s'agit d'une connexion
$input = socket_read($this->client, 3);
socket_close($this->socket);
header("Location: ../");
}
}
?> |