Add pre-execution checks with CommandHandlerExecutor to CommandHandler #242
@@ -15,6 +15,7 @@ import ch.unibas.dmi.dbis.cs108.casono.server.app.commands.ping.PingRequest;
|
|||||||
import ch.unibas.dmi.dbis.cs108.casono.server.domain.user.UserCleanupJob;
|
import ch.unibas.dmi.dbis.cs108.casono.server.domain.user.UserCleanupJob;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.domain.user.UserRegistry;
|
import ch.unibas.dmi.dbis.cs108.casono.server.domain.user.UserRegistry;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.network.NetworkManager;
|
import ch.unibas.dmi.dbis.cs108.casono.server.network.NetworkManager;
|
||||||
|
import ch.unibas.dmi.dbis.cs108.casono.server.network.command.execution.CommandHandlerExecutor;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.network.command.execution.CommandRouter;
|
import ch.unibas.dmi.dbis.cs108.casono.server.network.command.execution.CommandRouter;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.network.command.parsing.CommandParserDispatcher;
|
import ch.unibas.dmi.dbis.cs108.casono.server.network.command.parsing.CommandParserDispatcher;
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.server.network.events.DisconnectEvent;
|
import ch.unibas.dmi.dbis.cs108.casono.server.network.events.DisconnectEvent;
|
||||||
@@ -48,7 +49,8 @@ public class ServerApp {
|
|||||||
CommandParserDispatcher dispatcher = new CommandParserDispatcher();
|
CommandParserDispatcher dispatcher = new CommandParserDispatcher();
|
||||||
SessionManager sessionManager = new SessionManager(eventBus, dispatcher);
|
SessionManager sessionManager = new SessionManager(eventBus, dispatcher);
|
||||||
ResponseDispatcher responseDispatcher = new ResponseDispatcher(sessionManager);
|
ResponseDispatcher responseDispatcher = new ResponseDispatcher(sessionManager);
|
||||||
CommandRouter router = new CommandRouter();
|
CommandHandlerExecutor handlerExecutor = new CommandHandlerExecutor(responseDispatcher);
|
||||||
|
CommandRouter router = new CommandRouter(handlerExecutor);
|
||||||
|
|
||||||
eventBus.subscribe(DisconnectEvent.class, event -> sessionManager.onDisconnect(event));
|
eventBus.subscribe(DisconnectEvent.class, event -> sessionManager.onDisconnect(event));
|
||||||
|
|
||||||
|
|||||||
+27
@@ -0,0 +1,27 @@
|
|||||||
|
package ch.unibas.dmi.dbis.cs108.casono.server.network.command.execution;
|
||||||
|
|
||||||
|
import ch.unibas.dmi.dbis.cs108.casono.server.network.command.execution.checks.HandlerCheck;
|
||||||
|
import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.request.Request;
|
||||||
|
import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.Response;
|
||||||
|
import ch.unibas.dmi.dbis.cs108.casono.server.network.protocol.response.dispatcher.ResponseDispatcher;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public class CommandHandlerExecutor {
|
||||||
|
private final ResponseDispatcher responseDispatcher;
|
||||||
|
|
||||||
|
public CommandHandlerExecutor(ResponseDispatcher responseDispatcher) {
|
||||||
|
this.responseDispatcher = responseDispatcher;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void execute(CommandHandler<Request> handler, Request request) {
|
||||||
|
for (HandlerCheck check : handler.getChecks()) {
|
||||||
|
Optional<Response> result = check.check(request);
|
||||||
|
if (result.isPresent()) {
|
||||||
|
responseDispatcher.dispatch(result.get());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
handler.execute(request);
|
||||||
|
}
|
||||||
|
}
|
||||||
+7
-1
@@ -6,6 +6,11 @@ import java.util.Map;
|
|||||||
|
|
||||||
public class CommandRouter {
|
public class CommandRouter {
|
||||||
private final Map<Class<? extends Request>, CommandHandler<?>> handlers = new HashMap<>();
|
private final Map<Class<? extends Request>, CommandHandler<?>> handlers = new HashMap<>();
|
||||||
|
private final CommandHandlerExecutor handlerExecutor;
|
||||||
|
|
||||||
|
public CommandRouter(CommandHandlerExecutor commandHandlerExecutor) {
|
||||||
|
this.handlerExecutor = commandHandlerExecutor;
|
||||||
|
}
|
||||||
|
|
||||||
public <T extends Request> void register(Class<T> request, CommandHandler<T> handler) {
|
public <T extends Request> void register(Class<T> request, CommandHandler<T> handler) {
|
||||||
handlers.put(request, handler);
|
handlers.put(request, handler);
|
||||||
@@ -23,6 +28,7 @@ public class CommandRouter {
|
|||||||
throw new UnknownRequestException(
|
throw new UnknownRequestException(
|
||||||
"Unable to execute request " + requestName + ". Type unknown", requestName);
|
"Unable to execute request " + requestName + ". Type unknown", requestName);
|
||||||
}
|
}
|
||||||
handler.execute(request);
|
|
||||||
|
handlerExecutor.execute(handler, request);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user