You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

97 lines
3.2 KiB

package de.fd.fh;
import de.fd.fh.server.access.AccessContextEventListener;
import de.fd.fh.server.access.AccessRepository;
import de.fd.fh.server.access.AccessService;
import de.fd.fh.server.access.web.AccessController;
import de.fd.fh.server.game.GameRepository;
import de.fd.fh.server.game.GameService;
import de.fd.fh.server.game.web.GameController;
import de.fd.fh.server.user.UserContextEventListener;
import de.fd.fh.server.user.web.UserController;
import de.fd.fh.server.user.UserRepository;
import de.fd.fh.server.user.UserService;
import java.util.HashSet;
import java.util.Observable;
import java.util.Observer;
import java.util.Set;
import static spark.Spark.*;
public class ServerApp
{
private static AccessRepository accessRepository;
private static UserRepository userRepository;
private static GameRepository gameRepository;
private static AccessController accessController;
private static UserController userController;
private static GameController gameController;
private static final Set<Observer> listeners = new HashSet<>();
public static void main(String[] args)
{
initListeners();
if (accessController == null && userController == null)
{
initRepositories();
accessController = new AccessController((AccessService)
addListeners(new AccessService(accessRepository)));
userController = new UserController((UserService)
addListeners(new UserService(userRepository)));
gameController = new GameController(new GameService(gameRepository));
}
before("/*", (req, res) -> accessController.before(req));
post("/accounts/registrate", accessController::registrate);
post("/accounts/login", accessController::login);
post("/accounts/logout", accessController::logout);
delete("/accounts/:player_id", accessController::deletePlayer);
post("/users", userController::updateUser);
get("/users", userController::getCompleteUser);
get("/users/:user_id", userController::getUser);
post("/games", gameController::createGame);
get("/games/:game_id", gameController::findGameById);
get("/games/findByUser/:user_id", gameController::findRunningGamesOfUser);
get("/hello", (req, res) -> "Hello World");
}
public static void initController(
final AccessController accessController,
final UserController userController,
final GameController gameController
)
{
ServerApp.userController = userController;
ServerApp.accessController = accessController;
ServerApp.gameController = gameController;
}
private static Object addListeners(Observable service)
{
listeners.forEach(service::addObserver);
return service;
}
private static void initListeners()
{
listeners.add(new AccessContextEventListener(accessRepository));
listeners.add(new UserContextEventListener(userRepository));
}
private static void initRepositories()
{
accessRepository = new AccessRepository();
userRepository = new UserRepository();
gameRepository = new GameRepository();
}
}