suspend fun start()

in core/src/main/kotlin/com/jetbrains/aspire/worker/AspireWorker.kt [107:143]


    suspend fun start() {
        if (!workerLifetimes.isTerminated) return

        mutex.withLock {
            if (!workerLifetimes.isTerminated) return

            LOG.trace("Starting Aspire worker")
            val workerLifetime = workerLifetimes.next()

            val protocol = startAspireWorkerProtocol(workerLifetime.lifetime)

            subscribeToAspireWorkerModel(protocol.aspireWorkerModel, workerLifetime.lifetime)

            val token = UUID.randomUUID().toString()
            val port = NetworkUtils.findFreePort(47100)
            val certificate = calculateServerCertificate(workerLifetime)
            val model = protocol.aspireWorkerModel

            val aspireWorkerConfig = AspireWorkerConfig(
                protocol.wire.serverPort,
                token,
                port,
                certificate != null
            )

            LOG.trace { "Starting a new session host with launcher $aspireWorkerConfig" }
            val aspireWorkerLauncher = AspireWorkerLauncher.getInstance(project)
            aspireWorkerLauncher.launchWorker(aspireWorkerConfig, workerLifetime)

            _workerState.value = AspireWorkerState.Active(
                debugSessionToken = token,
                debugSessionPort = port,
                debugSessionServerCertificate = certificate,
                model = model
            )
        }
    }