Skip to content

Commit

Permalink
Create a local player when a link is created
Browse files Browse the repository at this point in the history
  • Loading branch information
duncte123 committed Feb 1, 2024
1 parent 07e99f0 commit 63a1bd6
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ class LavalinkClient(val userId: Long) : Closeable, Disposable {
if (!linkMap.containsKey(guildId)) {
val bestNode = loadBalancer.selectNode(region)
linkMap[guildId] = Link(guildId, bestNode)
bestNode.playerCache[guildId] = newPlayer(bestNode, guildId.toString())
}

return linkMap[guildId]!!
Expand Down
15 changes: 5 additions & 10 deletions src/main/kotlin/dev/arbjerg/lavalink/client/LavalinkNode.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import reactor.kotlin.core.publisher.toMono
import java.io.Closeable
import java.io.IOException
import java.net.URI
import java.util.concurrent.ConcurrentHashMap
import java.util.function.Consumer
import java.util.function.UnaryOperator

Expand Down Expand Up @@ -66,7 +67,7 @@ class LavalinkNode(
/**
* A local player cache, allows us to not call the rest client every time we need a player.
*/
internal val playerCache = mutableMapOf<Long, LavalinkPlayer>()
internal val playerCache = ConcurrentHashMap<Long, LavalinkPlayer>()

override fun dispose() {
close()
Expand Down Expand Up @@ -127,7 +128,7 @@ class LavalinkNode(
fun getPlayer(guildId: Long): Mono<LavalinkPlayer> {
if (!available) return Mono.error(IllegalStateException("Node is not available"))

if (guildId in playerCache) {
if (playerCache.containsKey(guildId)) {
return playerCache[guildId].toMono()
}

Expand Down Expand Up @@ -168,12 +169,12 @@ class LavalinkNode(
return rest.destroyPlayer(guildId)
.doOnSuccess {
removeCachedPlayer(guildId)
lavalink.removeDestroyedLink(guildId)
}
}

internal fun removeCachedPlayer(guildId: Long) {
playerCache.remove(guildId)
lavalink.removeDestroyedLink(guildId)
}

/**
Expand Down Expand Up @@ -385,13 +386,7 @@ class LavalinkNode(
}
}

internal fun getCachedPlayer(guildId: Long): LavalinkPlayer? {
if (guildId in playerCache) {
return playerCache[guildId]
}

return null
}
internal fun getCachedPlayer(guildId: Long): LavalinkPlayer? = playerCache[guildId]

override fun equals(other: Any?): Boolean {
if (this === other) return true
Expand Down
10 changes: 10 additions & 0 deletions src/main/kotlin/dev/arbjerg/lavalink/client/LavalinkPlayer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,16 @@ import dev.arbjerg.lavalink.client.protocol.toCustom
import dev.arbjerg.lavalink.protocol.v4.*
import kotlin.math.min

internal fun newPlayer(node: LavalinkNode, guildId: String) = LavalinkPlayer(node, Player(
guildId = guildId,
track = null,
volume = 100,
paused = false,
state = PlayerState(0, 0, false, -1),
voice = VoiceState("", "", ""),
filters = Filters()
))

/**
* Represents a player that is tied to a guild.
*/
Expand Down
12 changes: 5 additions & 7 deletions src/main/kotlin/dev/arbjerg/lavalink/internal/LavalinkSocket.kt
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,11 @@ class LavalinkSocket(private val node: LavalinkNode) : WebSocketListener(), Clos
val update = event as Message.PlayerUpdateEvent
val idLong = update.guildId.toLong()

if (idLong in node.playerCache) {
node.playerCache[idLong]!!.state = update.state
node.lavalink.getLinkIfCached(idLong)?.state = if (update.state.connected) {
LinkState.CONNECTED
} else {
LinkState.DISCONNECTED
}
node.getCachedPlayer(idLong)?.state = update.state
node.lavalink.getLinkIfCached(idLong)?.state = if (update.state.connected) {
LinkState.CONNECTED
} else {
LinkState.DISCONNECTED
}
}

Expand Down
9 changes: 5 additions & 4 deletions testbot/src/main/java/me/duncte123/testbot/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ private static void registerLavalinkNodes(LavalinkClient client) {
),*/

client.addNode(
"Mac-mini",
URI.create("ws://mac-mini.local.duncte123.lgbt:2333"),
"Pi-local",
URI.create("ws://pi.local.duncte123.lgbt:2333"),
"youshallnotpass",
RegionGroup.US
)
Expand Down Expand Up @@ -79,10 +79,11 @@ private static void registerLavalinkListeners(LavalinkClient client) {
final LavalinkNode node = event.getNode();

LOG.info(
"Node '{}' has stats, current players: {}/{}",
"Node '{}' has stats, current players: {}/{} (link count {})",
node.getName(),
event.getPlayingPlayers(),
event.getPlayers()
event.getPlayers(),
client.getLinks().size()
);
});

Expand Down

0 comments on commit 63a1bd6

Please sign in to comment.