Hasta ahora hemos estado hablando de funcionalidades genéricas del chat, requisitos, …pues bien hoy vamos a analizar todos los ficheros de los que se compone el servidor y no han sido comentados con anterioridad; al igual que en el artículo anterior, vamos a comentar el cometido de cada una de las funciones de manera genérica, y únicamente nos adentraremos en el contenido de estas en la función de manejo de los sockets y en las que tengan alguna curiosidad que comentar.
Database.c
Éste es un archivo de código fuente que sólo será incluido en el programa del servidor (en realidad también va a ser incluido en el programa que nos ayudará a crear la base de datos desde cero, pero la importancia de ese ejecutable es mínima y la comentaremos más adelante.
En este caso hemos decidido hacer uso del sistema de bases de dados SQLite dado que es una base de datos ligera portable y con características más que suficientes para utilizarla en nuestra pequeña aplicación.
sqlite3* db_open(char*);
El cometido de esta función es simple, simplemente abrirá la base de datos situada en el fichero que se le ha de pasar como argumento.
int db_prepare(sqlite3**);
Esta función no se utilizará en el servidor, pero será la que utilizará la aplicación que creará la base de datos en caso de que esta no exista, y su única función es la de crear las tablas necesarias en la base de datos así como el usuario administrador del chat.
int db_exec(sqlite3**, char*, int);
Esta función se encargará de ejecutar una sentencia SQL y de actuar en consecuencia dependiendo del flag que se le pase como último argumento.
int db_userExists(char*, sqlite3**);
Esta función comprueba si un usuario existe en la base de datos.
int db_checkUser(char*, char*, sqlite3**);
Esta función comprueba si un usuario asociado a una contraseña existe en la base de datos.
int db_addUser(char*, char*, int, sqlite3**);
Crea un nuevo usuario.
int db_deleteUser(char*, sqlite3**);
Elimina un usuario de la base de datos.
int db_listUser(int, sqlite3**);
Lista los usuarios en la base de datos
void db_close(sqlite3**);
Cierra la base de datos y todos los descriptores asociados a ella.
int db_addLog(sms, sqlite3**);
Añade a la tabla de logs un mensaje.
int db_getLog(int, sqlite3**);
Lista el contenido del log de la base de datos
int db_getLogPar(int, sqlite3**, char*);
Tiene un comportamiento similar al de la función anterior, sólo que esta admite parámetros para personalizar la búsqueda, como por ejemplo buscar entre dos fechas dadas.
static int callback(void*, int, char**, char**);
Función que será llamada para cada una de las filas obtenidas de una sentencia SELECT. Continue reading “Crea tu propio chat – Servidor” »