diff --git a/net/src/main/kotlin/org/openrs2/net/FutureExtensions.kt b/net/src/main/kotlin/org/openrs2/net/FutureExtensions.kt index 6dd94642..bdbe6d42 100644 --- a/net/src/main/kotlin/org/openrs2/net/FutureExtensions.kt +++ b/net/src/main/kotlin/org/openrs2/net/FutureExtensions.kt @@ -1,6 +1,7 @@ package org.openrs2.net import io.netty.util.concurrent.Future +import java.util.concurrent.CompletableFuture import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException import kotlin.coroutines.suspendCoroutine @@ -24,3 +25,25 @@ public suspend fun Future.awaitSuspend(): V { } } } + +public fun Future.asCompletableFuture(): CompletableFuture { + if (isDone) { + return if (isSuccess) { + CompletableFuture.completedFuture(now) + } else { + CompletableFuture.failedFuture(cause()) + } + } + + val future = CompletableFuture() + + addListener { + if (isSuccess) { + future.complete(now) + } else { + future.completeExceptionally(cause()) + } + } + + return future +}