Add: Implement CommandHandlerExecutor for evaluation of pre-execution checks in CommandRouter
This commit is contained in:
@@ -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.UserRegistry;
|
||||
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.parsing.CommandParserDispatcher;
|
||||
import ch.unibas.dmi.dbis.cs108.casono.server.network.events.DisconnectEvent;
|
||||
@@ -48,7 +49,8 @@ public class ServerApp {
|
||||
CommandParserDispatcher dispatcher = new CommandParserDispatcher();
|
||||
SessionManager sessionManager = new SessionManager(eventBus, dispatcher);
|
||||
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));
|
||||
|
||||
|
||||
+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 {
|
||||
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) {
|
||||
handlers.put(request, handler);
|
||||
@@ -23,6 +28,7 @@ public class CommandRouter {
|
||||
throw new UnknownRequestException(
|
||||
"Unable to execute request " + requestName + ". Type unknown", requestName);
|
||||
}
|
||||
handler.execute(request);
|
||||
|
||||
handlerExecutor.execute(handler, request);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user