Skip to content

Commit a3c0742

Browse files
committed
refactor: improve PlayerChannelInjector channel management with Caffeine cache
- Replaced `TempObjectSet` with a Caffeine cache for injected channel tracking, leveraging weak keys and removal listeners for better memory management. - Updated version to 1.21.7-2.29.4 in `gradle.properties`.
1 parent 7dcd999 commit a3c0742

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled
77
javaVersion=21
88
mcVersion=1.21.7
99
group=dev.slne.surf
10-
version=1.21.7-2.29.3
10+
version=1.21.7-2.29.4
1111
relocationPrefix=dev.slne.surf.surfapi.libs
1212
snapshot=false

surf-api-bukkit/surf-api-bukkit-server/src/main/kotlin/dev/slne/surf/surfapi/bukkit/server/packet/listener/PlayerChannelInjector.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import dev.slne.surf.surfapi.core.api.reflection.SurfProxy
1616
import dev.slne.surf.surfapi.core.api.reflection.createProxy
1717
import dev.slne.surf.surfapi.core.api.reflection.surfReflection
1818
import dev.slne.surf.surfapi.core.api.util.logger
19-
import dev.slne.surf.surfapi.core.api.util.synchronize
2019
import io.netty.channel.Channel
2120
import io.netty.channel.ChannelDuplexHandler
2221
import io.netty.channel.ChannelHandlerContext
@@ -56,7 +55,13 @@ object PlayerChannelInjector : Listener {
5655
.expireAfterAccess(1.minutes)
5756
.build<UUID, Connection>()
5857

59-
private val injectedChannels = TempObjectSet<Channel>().synchronize()
58+
private val injectedChannels = Caffeine.newBuilder()
59+
.weakKeys()
60+
.removalListener<Channel, Boolean> { channel, _, cause ->
61+
log.atWarning()
62+
.log("Channel $channel was removed from injected channels due to $cause")
63+
}
64+
.build<Channel, Boolean>()
6065

6166
private class TempObjectSet<T>() : ObjectOpenHashSet<T>() {
6267
private var added: Long = 0
@@ -127,7 +132,7 @@ object PlayerChannelInjector : Listener {
127132
val channelHandler = PacketHandler()
128133

129134
channel.eventLoop().submit {
130-
if (injectedChannels.add(channel)) {
135+
if (injectedChannels.asMap().putIfAbsent(channel, true) == null) {
131136
val pipeline = channel.pipeline()
132137

133138
if (pipeline.get(CHANNEL_NAME) != null) {
@@ -178,7 +183,7 @@ object PlayerChannelInjector : Listener {
178183
var connection: Connection? = null
179184

180185
override fun channelUnregistered(ctx: ChannelHandlerContext) {
181-
injectedChannels.remove(ctx.channel())
186+
injectedChannels.invalidate(ctx.channel())
182187
super.channelUnregistered(ctx)
183188
}
184189

0 commit comments

Comments
 (0)