Argentum Online Libre - Diagrama arquitectura

recox

Argentum Online Libre
Argentum Online, el juego en si es un proyecto simple, tan solo es un Cliente que se conecta a un Server. De hecho hace un tiempo hice un video mostrando como montar un servidor de AO en 2 clicks.


Pero otra cosa es todo el ecosistema de aplicaciones que rodean juego (la pagina web, el launcher, el bot de discord, el administrador web, entre otros) y en este post paso a hacer un diagrama para darles a conocer a todos de forma simple como se relacionan todos los proyectos.

Primero que nada aclarar que se utiliza el sistema de releases de github para poder hacer actualizaciones de cualquiera de los proyectos, es decir creamos un release del proyecto a actualizar subimos el ZIP y automaticamente el launcher va a bajar la actualizacion
Aqui dejo explicado en la wiki del proyecto como se hacen los releases https://github.com/ao-libre/ao-cliente/wiki/How-to-create-and-publish-Releases?


Diagrama Aplicaciones AO-LIBRE
Los nombres de cada uno de los modulos es el nombre del repositorio en github para que puedan encontrar los proyectos facilmente.

- Nota: Los cuadros con lineas punteadas de color verde y violeta indican que esas aplicaciones viven en la misma computadora.


Paso a explicar que hace cada una de las aplicaciones que aparecen aqui.

A- ao-autoupdater: Esta aplicacion, tambien conocida como el launcher, es la encargada de actualizar cada una de las aplicaciones. Cuando se instala AO-Libre, un acceso directo de esta aplicacion se crea en el escritorio para que los usuarios abran el juego, server, worldeditor desde aqui y en caso que haya una actualizacion disponible el mismo lo haga, como ya he dicho anteriormente todas y cada una de las actualizaciones se suben a github mediante releases.
Lenguaje: Visual Basic 6

B- ao-cliente: El juego, no hay mucho que decir aqui ya que todos aca conocen que es esto. Este es el cliente con el cual se pueden conectar a un servidor del juego. Tiene una conexion a github en el diagrama ya que al iniciar hace un request al mismo para verificar que esta usando la ultima version, caso contrario abre el launcher. Mas info de esto en el readme.md del proyecto

C- ao-server: El servidor, de nuevo no hay mucho que agregar. Si se quiere montar un servidor de argentum online este es el proyecto que van a ejecutar. Como extra se le implemento que pueda hacer requests xmlHttpRequest para que pueda comunicarse con ao-api-server para poder hacer diferentes tipos de cosas que luego veremos. Tiene una conexion a github en el diagrama ya que al iniciar hace un request al mismo para verificar que esta usando la ultima version, caso contrario abre el launcher. Mas info de esto en el readme.md del proyecto
Lenguaje: Visual Basic 6

D- ao-admin-web: Esta aplicacion es basicamente un administrador web para poder editar todos los archivos del servidor desde una web de manera remota, se creo el mismo para tener que evitar tener que conectarse al server mediante RDP para tener que editar algun archivo ya sea una cuenta, char, server.ini, etc. La misma se comunica con el proyecto ao-api-server para poder editar los archivos.
Lenguaje: Javascript (React.js)

E- ao-website: Aqui vive el sitio web del proyecto (http://www.argentumonline.org), se utiliza como host del mismo github pages. Este sitio web obtiene la ultima version del instalador el cual es subido en el proyecto ao-autoupdate, esto lo hace mediante la API de github. Tambien el sitio web muestra rankings del juego como jugadores con mas tiempo online, jugadores con mas oro, mas personajes o npcs matados, etc. Esta informacion la obtiene nuevamente gracias a ao-api-server.
Lenguaje: Javascript (vanilla javascript, es decir sin ningun framework o libreria)

D- ao-api-server: Esta aplicacion tiene varias responsabilidades, es la que le manda los datos que necesitan las distintas aplicaciones por ejemplo al ao-website o ao-admin-web como tambien hacer otras tareas como envio de emails, aqui vive el bot de discord y tambien hace backups de todos los chars a una base de datos mysql entre otros.

Esta aplicacion tiene acceso a los archivos del servidor, gracias a esto cuando el proyecto ao-admin-web le manda una peticion para editar un archivo (server.ini por ejemplo) el mismo obtiene esa peticion, edita el archivo y le avisa al admin web que el archivo fue modificado correctamente.

Gracias a que esta aplicacion tiene acceso a los archivos del server tambien se usa para hacer tareas como:
envio de emails al conectarse a la cuenta
envio de emails al crear una nueva cuenta
envio de emails para cambio de password
enviar un mensaje al chat de discord cuando un char se conecta
enviar un mensaje al chat de discord cuando un char nuevo es creado
enviar un mensaje al chat de discord cuando hay happy hour de experiencia/oro
enviar un mensaje al chat de discord cuando alguien el mismo usa el comando /online
enviar a la pagina web los datos de los diferentes rankings
en cada world-save va a crear un backup en una base de datos mysql de todas las cuentas, charfiles para poder actualizar los rankings
en cada world-save va a crear un backup en una base de datos mysql de todos los logs para poder compartilos con la comunidad y que encontrar errores sea mas facil entre todos.
entre otros.


Nota: Esto simplemente lo pongo como nota ya que realmente no genera ningun valor pero explico como esta actualmente en montado. Si bien como explique antes la aplicacion ao-api-server hace todas esas cosas, lo que he hecho para sacarle un poco de carga al server (ya que la ao-api-server vive en el mismo servidor que ao-server como se indica en el diagrama) fue poner una instancia gratuita de heroku y hacer que la pagina web consuma los rankings desde ahi, sacandole un poco de carga al mismo (ya que la base de datos tambien esta hosteada fuera del este servidor por el mismo motivo). Aqui pueden ver un ejemplo de un endpoint: https://api.argentumonline.org/api/v1/charfiles/toptenlevel.

En el readme.md del proyecto tiene documentacion sobre los diferentes endpoints y demas cosas.

Lenguaje: Javascript (Node.js/Express.js)

AO es un juego open-source y por ello abrimos nuestros logs del server al publico para que puedan ver que errores hay en el servidor y poder ayudar a repararlos


Cualquier duda que tengan tan solo pregunten y sientanse libres de agregar/modificar lo que queiran que para eso esta el proyecto.
 
Última edición:
Arriba