4
4
5
5
package io.gitpod.jetbrains.remote
6
6
7
+ import com.intellij.openapi.Disposable
7
8
import com.intellij.openapi.diagnostic.thisLogger
8
9
import com.intellij.openapi.project.Project
10
+ import com.intellij.openapi.rd.defineNestedLifetime
9
11
import com.intellij.util.application
10
12
import com.jediterm.terminal.ui.TerminalWidget
11
13
import com.jediterm.terminal.ui.TerminalWidgetListener
14
+ import com.jetbrains.rd.framework.util.launch
12
15
import com.jetbrains.rdserver.terminal.BackendTerminalManager
13
16
import io.gitpod.supervisor.api.Status
14
17
import io.gitpod.supervisor.api.StatusServiceGrpc
@@ -17,14 +20,15 @@ import io.gitpod.supervisor.api.TerminalServiceGrpc
17
20
import io.grpc.StatusRuntimeException
18
21
import io.grpc.stub.ClientCallStreamObserver
19
22
import io.grpc.stub.ClientResponseObserver
23
+ import kotlinx.coroutines.delay
20
24
import org.jetbrains.plugins.terminal.ShellTerminalWidget
21
25
import org.jetbrains.plugins.terminal.TerminalView
22
26
import java.util.*
23
27
import java.util.concurrent.CompletableFuture
24
28
import java.util.concurrent.ExecutionException
25
29
import java.util.concurrent.TimeUnit
26
30
27
- class GitpodTerminalService (project : Project ) {
31
+ class GitpodTerminalService (project : Project ): Disposable {
28
32
private companion object {
29
33
var hasStarted = false
30
34
}
@@ -34,11 +38,14 @@ class GitpodTerminalService(project: Project) {
34
38
private val terminalServiceFutureStub = TerminalServiceGrpc .newFutureStub(GitpodManager .supervisorChannel)
35
39
private val terminalServiceStub = TerminalServiceGrpc .newStub(GitpodManager .supervisorChannel)
36
40
private val statusServiceStub = StatusServiceGrpc .newStub(GitpodManager .supervisorChannel)
41
+ private val lifetime = defineNestedLifetime()
37
42
38
43
init {
39
44
start()
40
45
}
41
46
47
+ override fun dispose () = Unit
48
+
42
49
private fun start () {
43
50
if (application.isHeadlessEnvironment || hasStarted) return
44
51
@@ -270,11 +277,14 @@ class GitpodTerminalService(project: Project) {
270
277
@Suppress(" ObjectLiteralToLambda" )
271
278
shellTerminalWidget.addListener(object : TerminalWidgetListener {
272
279
override fun allSessionsClosed (widget : TerminalWidget ) {
273
- terminalServiceFutureStub.shutdown(
274
- TerminalOuterClass .ShutdownTerminalRequest .newBuilder()
275
- .setAlias(supervisorTerminal.alias)
276
- .build()
277
- )
280
+ lifetime.launch {
281
+ delay(5000 )
282
+ terminalServiceFutureStub.shutdown(
283
+ TerminalOuterClass .ShutdownTerminalRequest .newBuilder()
284
+ .setAlias(supervisorTerminal.alias)
285
+ .build()
286
+ )
287
+ }
278
288
}
279
289
})
280
290
}
0 commit comments