[app-wiring-refactor]: Remove static initialisation

- Remove all enum static managers
- Introduce interfaces for the managers
- Define new application wiring class (`ManagerFactory`)
- Externalise the configuration
This commit is contained in:
Francesco Burato 2020-10-30 17:37:12 +00:00
parent cf3dd2d94c
commit d0c2135e17
48 changed files with 1385 additions and 911 deletions

View file

@ -0,0 +1,118 @@
package mage.server;
import mage.server.draft.DraftManager;
import mage.server.game.GameManager;
import mage.server.game.GamesRoomManager;
import mage.server.game.ReplayManager;
import mage.server.managers.*;
import mage.server.tournament.TournamentManager;
import mage.server.util.ThreadExecutor;
public class MainManagerFactory implements ManagerFactory {
private final IConfigSettings configSettings;
private final IThreadExecutor threadExecutor;
private final IChatManager chatManager;
private final IDraftManager draftManager;
private final IGameManager gameManager;
private final IGamesRoomManager gamesRoomManager;
private final IMailClient mailClient;
private final IMailClient mailgunClient;
private final IReplayManager replayManager;
private final ISessionManager sessionManager;
private final ITableManager tableManager;
private final IUserManager userManager;
private final ITournamentManager tournamentManager;
public MainManagerFactory(IConfigSettings configSettings) {
this.configSettings = configSettings;
this.threadExecutor = new ThreadExecutor(configSettings);
this.mailClient = new MailClient(configSettings);
this.mailgunClient = new MailgunClient(configSettings);
this.chatManager = new ChatManager(this);
this.draftManager = new DraftManager(this);
this.gameManager = new GameManager(this);
this.replayManager = new ReplayManager(this);
this.sessionManager = new SessionManager(this);
this.tournamentManager = new TournamentManager(this);
final GamesRoomManager gamesRoomManager = new GamesRoomManager(this);
final TableManager tableManager = new TableManager(this);
final UserManager userManager = new UserManager(this);
this.gamesRoomManager = gamesRoomManager;
this.tableManager = tableManager;
this.userManager = userManager;
startThreads(gamesRoomManager, tableManager, userManager);
}
private void startThreads(GamesRoomManager gamesRoomManager, TableManager tableManager, UserManager userManager) {
userManager.init();
tableManager.init();
gamesRoomManager.init();
}
@Override
public IChatManager chatManager() {
return chatManager;
}
@Override
public IDraftManager draftManager() {
return draftManager;
}
@Override
public IGameManager gameManager() {
return gameManager;
}
@Override
public IGamesRoomManager gamesRoomManager() {
return gamesRoomManager;
}
@Override
public IMailClient mailClient() {
return mailClient;
}
@Override
public IMailClient mailgunClient() {
return mailgunClient;
}
@Override
public IReplayManager replayManager() {
return replayManager;
}
@Override
public ISessionManager sessionManager() {
return sessionManager;
}
@Override
public ITableManager tableManager() {
return tableManager;
}
@Override
public IUserManager userManager() {
return userManager;
}
@Override
public IConfigSettings configSettings() {
return configSettings;
}
@Override
public IThreadExecutor threadExecutor() {
return threadExecutor;
}
@Override
public ITournamentManager tournamentManager() {
return tournamentManager;
}
}