As you've probably noticed, development on this sort of stumbled. I actually went through a stage of not wanting to finish it (I've tried to quit this game many times, and keep coming back to it).
As some of you know, the original version was a single application, which the game, login, and database servers running together. While this worked, it wasn't a scalable architecture. So if one wanted to host the database and game servers on seperate databases, it wasn't supported.
In the past week I've gotten stuck back into programming on my days off from work, and this time, I wanted to do it right. The modern Shaiya Genesis is written in C++, designed as a CMake project, which makes it very easy to build, regardless of the platform. I'm currently working on it and committing the changes to a private repository of mine on GitHub, and it'll be made public as soon as the game server is developed to an acceptable level.
The project is split into 4 components: the common library (contains code shared by multiple servers), the database server (accepts connections from the authentication and game servers, and asynchronously processes database requests, and responds with the database), the authentication server (connects to the database server, processes login requests, etc), and the game server (retrieves definitions and player data from the database server, and handles all game related activities). This project is designed to be fully scalable, so all these servers can be run independently. This means it's very easy to add multiple game servers using the same database/auth server.
It's still in early stages, but just today I've managed to finish designing the cross-server communication. The authentication server submits a request to the database server, and provides a block of code to execute when it is completed. These requests are tracked through a request id, which is randomly generated for each request. The database server then provides the response for said request id, and the authentication server executes the code block with the data returned.
There's still a lot of work to be done, but stay tuned!
[Only registered and activated users can see links. Click Here To Register...]