En estos días no he adelantado mucho en el proyecto. Planeo reescribir el servidor desde 0, reemplazar el arreglo de la lista de clientes por una std::list y aprovechar un poco más la STL en general para ahorrarme trabajo. Además tengo en planes desarrollar algún sistema de paso de mensajes o eventos, así podría aislar completamente el hilo que escucha en el socket de las estructuras de datos de jugadores y NPCs. Me preocupa el manejo de mutexes y el posible impacto en el rendimiento en el caso de carga de usuarios intensa (eso provocaría que el hilo de red bloqueara y desbloqueara múltiples veces la lista de usuarios).
En otro orden de cosas, intenté interceptar algunas señales, pero parece que no es necesario. atexit() me crea un handler que maneja la señal de terminar. Me queda pendiente Ctrl-Break, en Windows hay una señal para eso, pero no encuentro el equivalente en Linux. Interceptar estas señales es muy importante, para poder hacer una salida limpia, desconectar a todos los usuarios, actualizar la base de datos y guardar toda la información del status actual del juego. No querrías que el servidor te desconecte mientras paseas por La Tierra Media y que al reconectarte aparezcas en Mustafar con un Sith muy cabreado justo al lado tuyo.
En otro orden de cosas, intenté interceptar algunas señales, pero parece que no es necesario. atexit() me crea un handler que maneja la señal de terminar. Me queda pendiente Ctrl-Break, en Windows hay una señal para eso, pero no encuentro el equivalente en Linux. Interceptar estas señales es muy importante, para poder hacer una salida limpia, desconectar a todos los usuarios, actualizar la base de datos y guardar toda la información del status actual del juego. No querrías que el servidor te desconecte mientras paseas por La Tierra Media y que al reconectarte aparezcas en Mustafar con un Sith muy cabreado justo al lado tuyo.
Comentarios
Publicar un comentario