diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/command/CommandRouter.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/command/CommandRouter.java new file mode 100644 index 0000000..186c1fe --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/server/network/command/CommandRouter.java @@ -0,0 +1,24 @@ +package ch.unibas.dmi.dbis.cs108.casono.server.network.command; + +import java.util.HashMap; +import java.util.Map; + +import ch.unibas.dmi.dbis.cs108.casono.server.network.parser.Request; + +public class CommandRouter { + private final Map, CommandHandler> handlers = new HashMap<>(); + + public void register(Class request, CommandHandler handler) { + handlers.put(request, handler); + } + + public void execute(Request request) { + CommandHandler handler = handlers.get(request.getClass()); + + if (handler == null) { + String requestName = request.getClass().toString(); + throw new UnknownRequestException("Unable to execute request " + requestName + ". Type unknown", requestName); + } + handler.execute(request); + } +}