Bonjour, toujours dans mon projet de client IRC assez particulier, je bloque sur la chose suivante.
En fonction des messages reçus provenant du serveur distant, j'effectue diverses actions.
Voici les parties du code interessantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 $socket = fsockopen($server_host, $server_port, $errno, $errstr, 2); if($socket) { //Connecté, envoies les infos de login Send("PASS $server_pass \n\r"); //Le mot de passe Send("NICK $nickname\n\r"); //Le pseudo Send("USER $nickname hostname servername :13 0 FR 3.6.29.0\n\r");// Les infos du client W:A Recieve($socket, $motd); Send("LIST\n\r"); Recieve($socket, $chans); }Seulement, comme on le voit sur le snipet du haut, je fais appel 2x à la fonction Recieve, sauf que dés qu'elle a été utilisée une 1ere fois, il semblerai qu'elle ne se remette pas disponible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 function Recieve($socket, $motd) { while(!feof($socket)) //Tant que l'on est connecté : { $buffer = fgets($socket); //On récupere une ligne de données $codes = explode(' ', $buffer); switch($codes[1]) { case 372: for ($i = 4; $i < count($codes); $i++) { $motd .= $codes[$i]." "; } break; case 376: echo $motd; break; case 322: for ($a = 3; $a < count($codes); $a++) { $chans .= $codes[$a]." "; } break; case 323: echo "$chans</br>"; break; } actualiser(); } }
J'explique rapidement le principe.
1) On se log, on fait appel à la fonction recieve pour récupérer le MOTD.
2) On demande la liste des canaux, on fait appel à la fonction recieve pour la récupérer... Sauf que le second appel ici n'est pas pris en compte car le 1er appel de la fonction semble tourner à l'infini.
Comment arriveriez vous à vous en sortir ? Merci d'avance !
Partager