4/5 (19 avis)
Vue 8 187 fois - Téléchargée 729 fois
#include "prosock.h" #include <stdio.h> #include "token.h" #include <time.h> void IrcProc(ProSock* s, int message); void proc_ircid(ProSock* s, int message); ProSock s_accept = CreateProSocket(proc_ircid); ProSock s_listen = CreateProSocket(proc_ircid); ProSock botirc = CreateProSocket(IrcProc); void main() { s_listen.SockListen(113); botirc.SockOpen("mesra.dal.net",6669); while (true) { Sleep(INFINITE); } } void IrcProc(ProSock* s, int message) { switch(message) { case ON_SOCKOPEN: { // Géneration d'un nick 'aléatoire'///// srand(time(0)); char c1 = (rand() % 10) + '0'; char c2 = (rand() % 10) + '0'; char c3 = (rand() % 10) + '0'; char c4 = (rand() % 10) + '0'; char nick[20]; sprintf(nick,"cosmo%c%c%c%c",c1,c2,c3,c4); ////////////////////////////////////////// printf("connection reussie sur %s (port %d) !\n",s->Ip(),s->Port()); s->SockWrite("NICK "); s->SockWriteln(nick); s->SockWriteln(" USER pouet . . pouit"); s->SockWriteln("JOIN #CosmoBob"); break; } case SOCKOPEN_ERROR: { printf("impossible de se connecter sur %s (port %d)\n",s->Ip(),s->Port()); // Le socket va être automatiquement fermé. break; } case SOCKWRITE_ERROR: { printf("Erreur de send\n"); s->SockClose(); break; } case SOCKREAD_ERROR: { printf("erreur de recv, le socket est automatiquement fermé\n"); break; } case ON_SOCKREADLN: { char buffer[512]; s->SockReadln(buffer,sizeof(buffer)); printf("%s\n",buffer); char param1[50]; token(buffer,param1,sizeof(param1),1,1,32); if (!strcmp(param1,"PING")) { s->SockWrite("PONG "); s->SockWriteln(buffer); } break; } } } void proc_ircid(ProSock* s, int message) { switch(message) { case ON_SOCKLISTEN: { printf("listen ok !\n"); s->SockAccept(&s_accept); s->SockClose(); break; } case SOCKLISTEN_ERROR: { printf("listen error (le socket va etre fermé automatiquement)!\n"); break; } case ON_SOCKACCEPT: { printf("accept ok Ip : %s (port %d)\n",s->Ip(),s->Port()); break; } case SOCKACCEPT_ERROR: { printf("accept error\n"); break; } case ON_SOCKREADLN: { char buffer[200]; s->SockReadln(buffer,sizeof(buffer)); printf("%s\n",buffer); char param1[50]; char param2[50]; token(buffer,param1,sizeof(param1),1,1,32); token(buffer,param2,sizeof(param2),3,3,32); char string2send[150]; strncpy(string2send,param2,sizeof(string2send)); strncat(string2send," , ",sizeof(string2send)); strncat(string2send,param1,sizeof(string2send)); strncat(string2send," : USERID : UNIX : pouet",sizeof(string2send)); s->SockWriteln(string2send); break; } } }
21 août 2006 à 14:09
dans IrcProc,
case SOCKREAD_ERROR:
{
printf("erreur de recv, le socket est automatiquement fermé\n");
break;
}
Tu pourrais tout simplement gérée ici l'erreur de close du à la deconnection Internet pour faire une relance du programme ?
j'espère que cette piste te servira ..
20 août 2006 à 04:17
mon problemme est que je suis en 56k puis ma connection deconnect a tout les 15-20 min donc je doit tjs restarter le bot mais je suis pas tjs devant mon ordi allors aurait t'il une facon de le remettre auto reconnect svp merci d'avance :)
5 mars 2006 à 00:25
7 oct. 2005 à 12:27
4 oct. 2005 à 23:06
mais bon, c'est juste pour libérer le port 113 au cas où...
De toute façon, ce n'est pas ce socket qui va consommer la maj. partie des ressources, donc pas important.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.