begin process at 2012 02 09 08:06:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > BOT IRC C++ FACONNABLE ET EXTENSIBLE AVEC ARCHITECTURE EVENEMENTIELLE (MVC LIKE). GERE DES COMPTES UTILISATEURS ET EXTENSIONS (PLUGINS)

BOT IRC C++ FACONNABLE ET EXTENSIBLE AVEC ARCHITECTURE EVENEMENTIELLE (MVC LIKE). GERE DES COMPTES UTILISATEURS ET EXTENSIONS (PLUGINS)


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseaux & Internet Classé sous :bot, irc, sql, boost, client Niveau :Initié Date de création :08/09/2007 Date de mise à jour :22/09/2007 19:58:46 Vu / téléchargé :6 823 / 246

Auteur : lovejava

Ecrire un message privé
Site perso
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Ce programme utilise les librairies boost, mysqlpp (et donc mysql classique). Il a été programmé de façon portable, mais n'a jamais été compilé/testé sous linux. Merci de me reporter les erreurs éventuelles. Lire Readme.txt dans le zip pour plus d'informations sur la compilation.

Voici un bot irc sur lequel je travaille maintenant depuis pas mal de temps. La source contient tout d'abord un dossier dl_source, (Dynamic Library Source), où se situent les fichiers constituant la bibliothèque du bot : gestion des user irc, de la lecture des options jusqu'au logging des erreurs, en passant par les socket, ce sont de mini librairies en C++ proposant une approche orientée objet que le bot utilise. Ce dossier contient également MinXL, une mini API pour parser le XML téléchargée depuis codes-sources, et une implémentation de SHA1 (aussi de codes-sources).

Mais le plus important reste la gestion des évènements, orchestrée par trois fichiers : event.cpp/.hpp, listener.cpp/.hpp, dispatcher.cpp/.hpp.
Le fichier dispatcher contient une classe qui gère tout le bas-niveau associé à la programmation d'un bot irc : les socket, le protocole irc, l'analyse des réponses serveur pour en tirer des informations...cette classe lance un thread qui lit toutes les réponses du serveur, et lorsqu'il reçoit des données susceptibles d'intéresser les couches de plus haut niveau (réception d'un message, un utilisateur a quitté le serveur, etc...) il créer un objet de type event (message_event, quit_event, etc...) qui contient toutes les informations qu'il a pu tirer de l'analyse via les expressions régulières des données reçues, et il envoie cet évènement aux classes qui se sont enregistrées auprès de lui en tant que listener. Il met l'évènement dans une queue, qu'un autre thread indépendant vide en permanence (il utilise wait() pour ne pas bouffer tout le CPU). C'est pour ça qu'à la limite, cette classe pourrait tout à fait être utilisée pour programmer un client irc car c'est une sorte d'interface avec le protocole irc permettant aux autres classes de ne s'occuper que du haut niveau. La classe event_dispatcher propose également, dans l'autre sens, des méthodes pour converser avec le serveur : send_message(), send_notice(), send_command()...etc... voir dispatcher.hpp pour une plus ample descriptions (dossier dl_source)

On peut noter aussi la présence d'une classe io_interface dans le fichier dabaseio.hpp, qui définit une interface avec un support de données générique. Ainsi, le bot gère le stockage et l'accès aux comptes utilisateurs de façon abstraite, sans s'occuper de quel manière les données sont réellement stockées : sur le disque, dans une base de données, etc...une interface pour une base mysql est fournie et utilisée par défaut, mais vous pouvez très bien définir la votre. Voir dabaseio.hpp et mysql_impl.hpp (et main.cpp pour changer l'interface utilisée) pour plus d'informations (dans le dossier dl_source, toujours).

Le bot est également capable de charger en cours d'exécution des extensions : en réalité, le bot de base fourni ici gère la gestion des comptes utilisateurs, quelques commandes utilitaires, et les modules, mais est surtout destiné à accueillir ces extensions qui définiront vraiment ses fonctionnalités. Une description des plugins (nom, description, auteur, paramètres d'initialisation, etc...) est faite dans un fichier XML. Chaque module a une librairie dynamique associée (.dll sous windows, .so sous linux) que le bot ouvre en temps réel pour chercher les fonctions dont il a besoin. Les modules jouissent des mêmes avantages que le bot (c'est pour ça que la bibliothèque de bot est dans une librairie dynamique (ou partagée) : les modules doivent pouvoir en profiter), notamment au niveau de l'event_dispatcher et du niveau d'abstraction. Ils bénéficient de toute la librairie du bot. Pour des informations plus précises sur le fonctionnement des modules, voir le fichier bot_source/plugin.hpp.

Le tout fait un programme assez conséquent, et parfois un peu fouilli (trop de classe tue la classe...) mais j'ai essayé de programmer de la façon la plus claire et logique possible. Il manque aussi un peu de commentaire, même si je me suis efforcé d'en mettre un maximum, aussi si vous avez besoin d'un éclaircissement sur une partie précise, dîtes-le moi.

Pour une documentation plus complète, lisez les commentaires de début de fichier, surtout ceux des en-tête (.hpp), qui comportent souvent des précisions intéressantes. Lisez aussi le fichier Readme.txt contenu dans le zip. Pour des questions, n'hésitez pas à poster des commentaires ici.
Merci de votre lecture !

Source

  • Voir dans le zip (trop de code pour mettre ici ^^)
Voir dans le zip (trop de code pour mettre ici ^^)

 Conclusion

comme précisé plus haut, n'a pas été testé en compilation/exécution sous linux.
Bug connu : segfault tout à la fin du programme (donc pas gênant), mais intriguant tout de même. Il semblerait se situer dans le destructeur de la classe bot (fichier : bot_source/bot.cpp).

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

08 septembre 2007 20:46:56 :
(ancien titre trop long et trop chargé)
09 septembre 2007 11:27:45 :
-
17 septembre 2007 18:58:25 :
Ajout d'un plugin IRCalc qui permet de calculer des expressions mathématiques (par exemple !calc 1*(2*-3/5^6), le bot répond : 1*(2*-3/5^6) = <résultat>)
22 septembre 2007 19:58:46 :

 Sources du même auteur

Source avec Zip CALCUL : ANALYSE D'EXPRESSIONS ALGÉBRIQUES GRÂCE À LA RÉCURS...

 Sources de la même categorie

Source avec Zip SERVEUR MULTITHREAD [LINUX/WIN] par nipepsinicolas
Source avec Zip Source avec une capture SECURE REMOTE SHELL [WIN32] par ganjarasta
Source avec Zip Source avec une capture SUIVI DE PRODUCTION ONDULEUR PHOTOVOLTAÏQUE SOLARMAX par brunovan
Source avec Zip MINICHAT MULTI-CLIENT par wisar
SOCKET CPP par baptchr55

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture IRC CLIENT MULTISERVEUR EN MFC (TXIRC) par TeniX
Source avec Zip INTÉGRATION SIMPLE D'UN CLIENT IRC À UNE APPLICATION par PJulot
Source avec Zip Source avec une capture Source .NET (Dotnet) CLIENT IRC BASIQUE par king67
Source avec Zip Source avec une capture CLIENT IRC SIMPLE AVEC DEV-CPP par TeniX
PARSER IRC par bustarhy

Commentaires et avis

Commentaire de Shromilder le 09/09/2007 11:45:05

Vu le descriptif, y a l'air d'y avoir du boulot!
Je prend pour regarder :)) (et apprendre des choses)
Merci ;)

Commentaire de lovejava le 09/09/2007 12:48:19

De rien ^^
C'est vrai que c'est imposant mais bon faut pas se fier au nombre de fichier, comme expliqué dans readme.txt, ya beaucoup de headers qui sont en double. Et puis j'ai voulu faire des truc bien séparés ;)
En tout cas si tu as des questions/suggestions n'hésite pas...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Client IRC [ par SAtaN ] quelqu'un aurait il un tutoriel, des infos, pour m'aider à creer un client IRC ???PS : j'utilise Borland C++a+ C++ Builder: Client irc (a laide!) [ par Psyc0s ] Bon je suis en train de faire un client irc avec C++ builder Mais le socket ne veux pas envoyer les message au serveur:(La connexion au serveur foncti Bot Pour Irc, Probléme pour les commandes [ par oshin ] Chalut tousJ'ai besoin de votre aide car je n'arrive pas à faire en sorte que lorsqu'on écrit sur le salon par ex: !jeux Le bot réponde : Je n'ai pas client IRC ?? [ par crAzYJoJoo ] Slt, je cherche le code source d'un client irc pour voir comment ca marcheest ce que qq1 sait ou je peux trouver ca ?merci d'avance ++ bot irc [ par Nano ] quelqu'un pourait me donner la source d un bot irc simple fait avec visual c++Merci d'avance un client irc ultra simplifié pour une radio [ par gastonzine ] Bonjour à tous,je suis à la recherche de quelqu'un qui serait capable de faire un petit client irc en cpp. Je ne suis pas developpeur mais je pense qu J'aimeré faire un bot irc qui marche en mode console , avec vc++ [ par y4r1 ] J'aimeré faire un bot irc qui marche en mode console , avec vc++aidé moi svp [C] Connexion à MsSQL sous Linux [ par ZedMaTrix ] Salut les codeurs !Voila, je suis interessé par le developpement d'un client SQL.La cible de mon programme est un serveur MS-SQL.Bon pour le moment, s Question pour bot irc [ par restesouple ] Bonjour,J'ai pris cette source http://www.cppfrance.com/code.aspx?ID=20596&nbsp;et avec celle -ci qui fonctionne parfaitement, je voudrais savoir comm requetes SQL dans c++ builder 5 [ par mamel12 ] bonjour à tous j'ai vraiment besoin d'aide.je travaille avec c++ builder 5 et j'ai créé des tables avec paradox, je veux maintenant poser des requetes


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,967 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales