Starter.java

package com.github.quizclash.plugin.main;

import com.github.quizclash.application.ScreenProviderManager;
import com.github.quizclash.application.TerminationException;
import com.github.quizclash.application.screen.ScreenFactory;
import com.github.quizclash.domain.InvalidQuestionFormatException;
import com.github.quizclash.domain.Repository;
import com.github.quizclash.domain.SettingsRepository;
import com.github.quizclash.plugin.cli.QuizClashCLI;
import com.github.quizclash.plugin.database.LocalCategoryRepository;
import com.github.quizclash.plugin.database.RepositoryImpl;
import com.github.quizclash.plugin.database.SettingsRepositoryImpl;
import com.github.quizclash.plugin.database.UserRepositoryImpl;
import com.github.quizclash.plugin.network.SocketIOGameRoomManager;

import java.io.IOException;
import java.net.URI;

public class Starter {
  public static void main(String[] args) throws IOException, InvalidQuestionFormatException {
    URI gameServerURI = URI.create(args[0]);
    SocketIOGameRoomManager socketIOGameRoomManager = new SocketIOGameRoomManager(gameServerURI);
    LocalCategoryRepository categoryRepository = new LocalCategoryRepository();
    SettingsRepository settingsRepository = new SettingsRepositoryImpl();
    UserRepositoryImpl userRepository = new UserRepositoryImpl();
    Repository repository = new RepositoryImpl(categoryRepository, settingsRepository,
        userRepository);
    try {
      QuizClashCLI quizClashCLI = new QuizClashCLI(100, 30);
      ScreenFactory cliScreenFactory = quizClashCLI.getCLIScreenFactory();
      ScreenProviderManager screenProviderManager = new ScreenProviderManager(repository,
          cliScreenFactory, socketIOGameRoomManager);
      screenProviderManager.run();
      quizClashCLI.destroy();
    } catch (TerminationException e) {
      System.err.println("QuizClash was terminated due to an error");
    }
  }
}