private void client()

in daemon/src/main/java/org/mvndaemon/mvnd/daemon/Server.java [262:303]


    private void client(SocketChannel socket) {
        LOGGER.info("Client connected");
        if (!checkToken(socket)) {
            LOGGER.error("Received invalid token, dropping connection");
            updateState(DaemonState.Idle);

            return;
        }

        try (DaemonConnection connection = new DaemonConnection(socket)) {
            LOGGER.info("Waiting for request");
            CompletableFuture<Message> request = new CompletableFuture<>();
            new DaemonThread(() -> {
                        Message message = connection.receive();
                        request.complete(message);
                    })
                    .start();
            Message message = request.get(1, TimeUnit.MINUTES);
            if (message == null) {
                LOGGER.info("Could not receive request after one minute, dropping connection");
                updateState(DaemonState.Idle);
                return;
            }
            if (message instanceof BuildRequest buildRequest) {
                LOGGER.info("Request received: {}", message);
                if (Boolean.getBoolean("mvnd.dump.client.env")) {
                    // Environment can contain passwords or tokens, so do not dump, unless specifically asked for
                    LOGGER.trace("Client environment dump: {}", buildRequest.getEnv());
                }
                handle(connection, buildRequest);
            } else {
                LOGGER.info("Ignoring message: {}", message);
            }
        } catch (Throwable t) {
            LOGGER.error("Error reading request", t);
        } finally {
            if (!noDaemon) {
                clearCache("sun.net.www.protocol.jar.JarFileFactory", "urlCache");
                clearCache("sun.net.www.protocol.jar.JarFileFactory", "fileCache");
            }
        }
    }