Skip to content

Commit c98faf7

Browse files
committed
Reapply "feat: implement TempObjectSet for enhanced channel management and statistics tracking [please revert after testing]"
This reverts commit 5683e9c.
1 parent 5683e9c commit c98faf7

File tree

1 file changed

+60
-2
lines changed
  • surf-api-bukkit/surf-api-bukkit-server/src/main/kotlin/dev/slne/surf/surfapi/bukkit/server/packet/listener

1 file changed

+60
-2
lines changed

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

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package dev.slne.surf.surfapi.bukkit.server.packet.listener
22

33
import com.github.benmanes.caffeine.cache.Caffeine
44
import com.sksamuel.aedile.core.expireAfterAccess
5+
import dev.slne.surf.surfapi.bukkit.api.extensions.server
56
import dev.slne.surf.surfapi.bukkit.api.nms.NmsUseWithCaution
67
import dev.slne.surf.surfapi.bukkit.api.nms.nmsBridge
78
import dev.slne.surf.surfapi.bukkit.server.impl.nms.SurfBukkitNmsBridgeImpl
@@ -15,7 +16,6 @@ import dev.slne.surf.surfapi.core.api.reflection.SurfProxy
1516
import dev.slne.surf.surfapi.core.api.reflection.createProxy
1617
import dev.slne.surf.surfapi.core.api.reflection.surfReflection
1718
import dev.slne.surf.surfapi.core.api.util.logger
18-
import dev.slne.surf.surfapi.core.api.util.mutableObjectSetOf
1919
import dev.slne.surf.surfapi.core.api.util.synchronize
2020
import io.netty.channel.Channel
2121
import io.netty.channel.ChannelDuplexHandler
@@ -25,6 +25,8 @@ import io.papermc.paper.connection.PaperPlayerLoginConnection
2525
import io.papermc.paper.connection.ReadablePlayerCookieConnectionImpl
2626
import io.papermc.paper.event.connection.PlayerConnectionValidateLoginEvent
2727
import io.papermc.paper.network.ChannelInitializeListenerHolder
28+
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet
29+
import it.unimi.dsi.fastutil.objects.ObjectSet
2830
import net.kyori.adventure.key.Key
2931
import net.minecraft.network.Connection
3032
import net.minecraft.network.HandlerNames
@@ -35,6 +37,7 @@ import org.bukkit.event.EventPriority
3537
import org.bukkit.event.Listener
3638
import org.bukkit.event.player.PlayerJoinEvent
3739
import java.util.*
40+
import java.util.function.Predicate
3841
import kotlin.time.Duration.Companion.minutes
3942
import dev.slne.surf.surfapi.bukkit.api.event.register as registerListener
4043
import dev.slne.surf.surfapi.bukkit.api.event.unregister as unregisterListener
@@ -50,7 +53,62 @@ object PlayerChannelInjector : Listener {
5053
.expireAfterAccess(1.minutes)
5154
.build<UUID, Connection>()
5255

53-
private val injectedChannels = mutableObjectSetOf<Channel>().synchronize()
56+
private val injectedChannels = TempObjectSet<Channel>().synchronize()
57+
58+
private class TempObjectSet<T>(set: ObjectSet<T>? = null) : ObjectOpenHashSet<T>(set) {
59+
private var added: Long = 0
60+
private var removed: Long = 0
61+
62+
private enum class Operation {
63+
ADD, REMOVE, REMOVE_ALL, REMOVE_IF, ADD_ALL
64+
}
65+
66+
fun printStats(operation: Operation) {
67+
log.atInfo()
68+
.log("O:$operation,A:$added,R:$removed,D:${added - removed},S:$size,P:${server.onlinePlayers.size}")
69+
}
70+
71+
override fun addAll(c: Collection<T?>): Boolean {
72+
added += c.size
73+
printStats(Operation.ADD_ALL)
74+
75+
return super.addAll(c)
76+
}
77+
78+
override fun removeAll(c: Collection<T?>): Boolean {
79+
removed += c.size
80+
printStats(Operation.REMOVE_ALL)
81+
82+
return super.removeAll(c)
83+
}
84+
85+
override fun add(element: T?): Boolean {
86+
added += 1
87+
printStats(Operation.ADD)
88+
89+
return super.add(element)
90+
}
91+
92+
override fun remove(element: T?): Boolean {
93+
removed += 1
94+
printStats(Operation.REMOVE)
95+
96+
return super.remove(element)
97+
}
98+
99+
override fun removeIf(filter: Predicate<in T>): Boolean {
100+
val removedElements = this.filter(filter::test)
101+
102+
removed += removedElements.size
103+
printStats(Operation.REMOVE_IF)
104+
105+
return super.removeIf(filter)
106+
}
107+
108+
companion object {
109+
private const val serialVersionUID: Long = -2618969176232686100L
110+
}
111+
}
54112

55113
fun register() {
56114
ChannelInitializeListenerHolder.addListener(CHANNEL_KEY) { this.injectChannel(it) }

0 commit comments

Comments
 (0)