public void startServer() {
        GameSession gameSession = null;
        try {
            this.remotePlayer = new ServerPlayer();
            localPlayer = new Player("X", this.nextMove);

            ServerPlayer _remotePlayer = (ServerPlayer) this.remotePlayer;

            // TODO Ask the user for the dimensions
            boardModel = new backend.BoardModel(20, 20);
            this.initBoardPanel();

            ArrayList<Player> playerList = new ArrayList<>();
            playerList.add(_remotePlayer);
            playerList.add(localPlayer);

            System.out.println("Waiting for remote connection...");
            _remotePlayer.waitForConnection();
            System.out.format("Player %s at %s connected!\n", _remotePlayer.getName(), _remotePlayer.getAddress().toString());

            _remotePlayer.sendServerName(localPlayer.getName());
            _remotePlayer.sendBoardInfo(boardModel);

            _remotePlayer.waitForClientToStart();
            JOptionPane.showMessageDialog(this,
                    "Game started, they go first.",
                    null,
                    JOptionPane.PLAIN_MESSAGE);

            gameSession = new GameSession(playerList, boardModel, 5);

            gameSession.addGameEventListener(_remotePlayer);
            gameSession.addGameEventListener(this);

        } catch (IOException ex) {
            JOptionPane.showMessageDialog(this,
                    "Cannot setup network.",
                    "Error",
                    JOptionPane.ERROR_MESSAGE);
            return;
        }
        
        try {
            gameSession.takeTurn(whoseTurn);
        } catch (InterruptedException ex) {
        } finally {
            JOptionPane.showMessageDialog(this,
                    "Client disconnected.",
                    null,
                    JOptionPane.INFORMATION_MESSAGE);
        }
    }