import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.util.HashMap; import java.util.Map; public class GameController { public HashMap> supportedVersions = new HashMap<>(Map.of( "1.1.0", OnlinePlayer_1_1_0.class )); public void startOnlineGame(Class localPlayerClass, InetSocketAddress address) throws IOException { AsyncSocket clientSocket; if (address.getHostName() == null) { // SERVER MODE ServerSocket serverSocket = new ServerSocket(address.getPort()); System.out.println("Waiting for client connection..."); clientSocket = new AsyncSocket(serverSocket.accept(), null); serverSocket.close(); } else { Socket socket = new Socket(); socket.connect(address); clientSocket = new AsyncSocket(socket, null); } clientSocket.send("VERSION", "Gruppe03 " + String.join(" ", supportedVersions.keySet())); clientSocket.setHandler((message) -> { SocketPackage socketPackage = new SocketPackage(message); if (socketPackage.getName().equals("VERSION")) { // TODO: check version matches - instantiate online player } else { // TODO: received invalid package / package out of order } }); // TODO: instantiate local player, set server / client roles } public void startLocalGame(Class localPlayerClass, Class enemyClass, int size) { LocalPlayer localPlayer; AiPlayer aiPlayer; try { localPlayer = localPlayerClass.getDeclaredConstructor().newInstance(); aiPlayer = enemyClass.getDeclaredConstructor().newInstance(); } catch (Exception e) { e.printStackTrace(); return; } localPlayer.setEnemy(aiPlayer); aiPlayer.setEnemy(localPlayer); } }