Sous couche Module_Mysql.
Infos :
Auteur : [Leo_01] => Moi :-)
Version : 0.2.2
Licence : GPL v2
Notes : -
But :
Faciliter la lecture des paramètres et leurs utilisations dans les modules travaillant avec Mysql.
Principe :
Dans ce but, plusieurs variables ont été definies :
mconf : c'est une structure (elle est définie en détail plus bas) qui contient l'ensemble des paramètres pour se connecter ainsi qu'interroger la bonne db/table dans mysql.
mysql, res, row : respectivement, la connexion, le resultat d'une requête et un ligne de résultat
Le fait que le robot
NewSyndrome puisse être sur plusieurs channels, oblige la configuration des modules de type mysql à être très maléable.
|=> il ne peut avoir qu'un seul et un unique serveur mysql et une database.
|=> Il peut y avoir une table par channel ou une table pour tous les channels ou une table pour un seul channel, les autres channels n'ayant pas accès à cette fonction.
Toutes ces possibilités de configuration nécessitent :
- d'analyser la chaîne de configuration des tables passée au module lors de son chargement (fonction load_chan_table).
- chaque fois qu'une command est appellé depuis le channel, il faut situer l'endroit où doit être stockée les données (fonctions table_for_chan et chan_for_table).
- lors du déchargement du module, la libèreration de la mémoire alloué par la structure mconf (fonction unload_chan_table).
Variables :
La structure suivante est définie pour gérer les paramètres de connection :
typedef struct conf_mysql_ conf_mysql;
struct conf_mysql_
{
char *db : Base de donnée sur laquelle travaille le bot.
char *table : Juste présent pour compatibilité avec les anciens modules (deprecié, ne pas utilisé).
char *login : Login pour accèder au serveur Mysql.
char *pwd : Password pour accèder au serveur Mysql.
char *ip : Ip/host pour accèder au serveur Mysql.
char *url : Adresse où se trouve la page web
int port : Port pour accèder au serveur Mysql.
int nbchan : Nombre de correspondance table / channel.
char ***liaison : Correspondance table = channel.
=> [x][0] : channel
=> [x][1] : table
};
Variables intimement liés avec Mysql :
MYSQL *mysql : Connection à la bd mysql.
MYSQL_RES *res : Résultat d'une requête.
MYSQL_ROW row : Un ligne de résultat.
conf_mysql mconf : Variable qu'utilise chaque module pour stocker les paramètres de connection au serveur Mysql.
Prototypes :
int load_chan_table(conf_mysql *conf_module, char *conf_chan) : Charge les tables liés à chaque channel en mémoire.
char *table_for_chan(conf_mysql *conf_module, char *chan) : Pour un channel donnée renvoie la table sur laquelle travailler.
char *chan_for_table(conf_mysql *conf_module, char *table) : Pour une table donnée renvoie le channel correspondant.
void affiche_param_mysql(conf_mysql * conf_module) : Affiche la table de conversion channel <-> table mysql.
int unload_chan_table(conf_mysql *conf_module) : Libère la mémoire allouée pour stocker les paramètres de configuration.
Exemples d'utilisation :
Je sais que certaines personnes sont allérgiques aux explications théoriques et préfèrent un code source :
Aide/Contact :
N'hésitez pas à me contacter en cas de problèmes, questions, critiques, etc ...
Si vous utilisez valgrind pour checker votre code et qu'il affiche des trous de mémoire inexpliqués lors de l'utilisation d'un module lié a la libmysql => ceci est normal, nous avons aussi le problème et le même problème existe lors que l'application qui utilise la libmysql est de type standalone.