diff --git a/platform/script-debugger/debugger-ui/src/RemoteVmConnection.kt b/platform/script-debugger/debugger-ui/src/RemoteVmConnection.kt index 078941fc0233..9a3196e76d07 100644 --- a/platform/script-debugger/debugger-ui/src/RemoteVmConnection.kt +++ b/platform/script-debugger/debugger-ui/src/RemoteVmConnection.kt @@ -50,52 +50,53 @@ abstract class RemoteVmConnection : VmConnection() { port = address.port setState(ConnectionStatus.WAITING_FOR_CONNECTION, "Connecting to ${address.hostString}:${address.port}") val result = AsyncPromise() + + var attemptNumber = 0 + fun attempt() { + connectCancelHandler.set { result.setError("Closed explicitly") } + + val connectionPromise = AsyncPromise() + connectionPromise.rejected { result.setError(it) } + + result + .done { + vm = it!! + setState(ConnectionStatus.CONNECTED, "Connected to ${connectedAddressToPresentation(address, it)}") + startProcessing() + } + .rejected { + if (it !is ConnectException) { + LOG.errorIfNotMessage(it) + } + setState(ConnectionStatus.CONNECTION_FAILED, it.message) + } + .processed { connectCancelHandler.set(null) } + + createBootstrap(address, result) + .connect(address, connectionPromise, + maxAttemptCount = if (stopCondition == null) NettyUtil.DEFAULT_CONNECT_ATTEMPT_COUNT else -1, + stopCondition = stopCondition) + ?.closeFuture()?.addListener { + if (result.isFulfilled) { + close("Process disconnected unexpectedly", ConnectionStatus.DISCONNECTED) + } + else { + if (++attemptNumber > 10 || (stopCondition?.value(null) ?: false)) { + result.setError("Cannot establish connection - promptly closed after open") + } + else { + sleep(result, 300) + attempt() + } + } + } + } + val future = ApplicationManager.getApplication().executeOnPooledThread { if (Thread.interrupted()) { return@executeOnPooledThread } - var attemptNumber = 0 - fun attempt() { - connectCancelHandler.set { result.setError("Closed explicitly") } - - val connectionPromise = AsyncPromise() - connectionPromise.rejected { result.setError(it) } - - result - .done { - vm = it!! - setState(ConnectionStatus.CONNECTED, "Connected to ${connectedAddressToPresentation(address, it)}") - startProcessing() - } - .rejected { - if (it !is ConnectException) { - LOG.errorIfNotMessage(it) - } - setState(ConnectionStatus.CONNECTION_FAILED, it.message) - } - .processed { connectCancelHandler.set(null) } - - createBootstrap(address, result) - .connect(address, connectionPromise, - maxAttemptCount = if (stopCondition == null) NettyUtil.DEFAULT_CONNECT_ATTEMPT_COUNT else -1, - stopCondition = stopCondition) - ?.closeFuture()?.addListener { - if (result.isFulfilled) { - close("Process disconnected unexpectedly", ConnectionStatus.DISCONNECTED) - } - else { - if (++attemptNumber > 10 || (stopCondition?.value(null) ?: false)) { - result.setError("Process disconnected unexpectedly") - } - else { - sleep(result, 300) - attempt() - } - } - } - } - attempt() }