Bonjour, je code un bot IRC, du coups j'ai besoin de créer un algorithme qui récupère le pseudo et le texte pour chaque méssage envoyé sur le canal IRC que mon bot gère.
J'ai donc codé les fonctions suivantes :
La fonction recv_line est dans un thread dans une boucle infinie dans mon main(), mais j'ai du mal avec mon algo car malgrès que je vérifie que les chaines traités contiennent des PRIVMSG, donc que au début de celle ci on a le pseudo de la source du méssage placé avant un '!' j'ai des chaines qui passent cette condition mais qui n'on pas de '!', d'ou ma condition i<50 sinon nick dépasse car la condition n'est jamais remplie.
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 int gerer_recv(char* buff) { int i=1, limite = 0; char nick[50] = ""; char *txt = NULL; txt = strstr(buff, "PRIVMSG"); if(txt == NULL) { // Si la chaine n'est pas un PRIVMSG on ne la traite pas printf("%s", buff); return 0; } while(buff[i] != '!' && i < 50) { // La condition i<50 pour savoir si c'est un véritable nick[i-1] = buff[i]; // message a traiter car pseudo < 50 caractères de longs i++; } if(i==49) { printf("%s", buff); return 0; } txt = strstr(txt, ":"); printf("%s : %s", nick, txt+1); // On affiche la chaine située 1 caractère après le ':' } void* recv_line(void* data) { int i = 0, t_buff; char buff[512] = ""; SOCKET serv = (SOCKET)data; t_buff = recv(serv, buff, 512, 0); gerer_recv(buff); }
Et enfin, et surtout, mon programme fait chauffer mon ordi, je l'entend très vite, c'est le fait qu'il y ai un thread dans un while(1) ou car mon algo est mal fait ?
Merci
Partager