Is the continuation of eXpansion the server controller project for Maniaplanet.
As I have explained it in the eXpansion 1 topic, we decided to drop support in the first version of eXpansion.
For a while now I had started thinking how could eXpansion be redone without using Manialive in a much better way. eXpansion² is still a prototype project that might never see the day.
Here is the main reasons for starting from scatch :
- Using a robust framework that will allow Unit testing.
- Abstraction of the game mode (script) events to make the logic simpler.
- Allow plugins to be easily adapted for new game modes.
- Allow plugins to replace elements of other plugins.
The first choice that was made was to use symfony'ies Dependency Injection system. Using symfony as a base framework gives us a robust framework with a very solid DI system which allow us to build & test our code quickly.
On top of that we coded our own system, which consist of Data Providers & Plugins.
Basically, both are Symfony services, Data provider transforms the data from any game mode to something normalized that a plugin can use.
So basically, if we wish to make a plugin compatible with a new game mode we “just” need to make a new data provider.
Using symfony DI, has one big drawback and that is loading plugins on the fly, or rather bundles. The DI needs to be compiled for performance and that means we won’t be able to like in eXpansion one start & stop plugins from in game.
The main reason for this is that a bundle might replace a service entirely, and that needs to happen at the start of the system.