Skip to content

Commit f5386ef

Browse files
committed
Add delay to moving orphaned Links
1 parent d92e73f commit f5386ef

File tree

3 files changed

+19
-0
lines changed

3 files changed

+19
-0
lines changed

src/main/kotlin/dev/arbjerg/lavalink/client/LavalinkClient.kt

+17
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ import dev.arbjerg.lavalink.internal.ReconnectTask
99
import dev.arbjerg.lavalink.protocol.v4.VoiceState
1010
import reactor.core.Disposable
1111
import reactor.core.publisher.Flux
12+
import reactor.core.publisher.Mono
1213
import reactor.core.publisher.Sinks
1314
import java.io.Closeable
1415
import java.time.Duration
1516
import java.util.concurrent.ConcurrentHashMap
1617
import java.util.concurrent.CopyOnWriteArrayList
1718
import java.util.concurrent.Executors
1819
import java.util.concurrent.TimeUnit
20+
import kotlin.time.toJavaDuration
1921

2022
/**
2123
* @param userId ID of the bot for authenticating with Discord
@@ -169,6 +171,21 @@ class LavalinkClient(val userId: Long) : Closeable, Disposable {
169171
return
170172
}
171173

174+
val session = node.cachedSession
175+
val canResume = session != null && session.resuming && session.timeoutSeconds > 0
176+
if (canResume) {
177+
node.resumeTimer = Mono.delay(Duration.ofSeconds(session!!.timeoutSeconds))
178+
.subscribe() { transferNodes(node) }
179+
} else {
180+
transferNodes(node)
181+
}
182+
}
183+
184+
internal fun onNodeConnected(node: LavalinkNode) {
185+
node.resumeTimer?.dispose()
186+
}
187+
188+
private fun transferNodes(node: LavalinkNode) {
172189
linkMap.forEach { (_, link) ->
173190
if (link.node == node) {
174191
val voiceRegion = link.cachedPlayer?.voiceRegion

src/main/kotlin/dev/arbjerg/lavalink/client/LavalinkNode.kt

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class LavalinkNode(
5454
internal val sink: Many<ClientEvent> = Sinks.many().multicast().onBackpressureBuffer()
5555
val flux: Flux<ClientEvent> = sink.asFlux()
5656
private val reference: Disposable = flux.subscribe()
57+
internal var resumeTimer: Disposable? = null
5758

5859
internal val rest = LavalinkRestClient(this)
5960
val ws = LavalinkSocket(this)

src/main/kotlin/dev/arbjerg/lavalink/internal/LavalinkSocket.kt

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class LavalinkSocket(private val node: LavalinkNode) : WebSocketListener(), Clos
4040
logger.info("${node.name} has been connected!")
4141
open = true
4242
reconnectsAttempted = 0
43+
node.lavalink.onNodeConnected(node)
4344
}
4445

4546
override fun onMessage(webSocket: WebSocket, text: String) {

0 commit comments

Comments
 (0)