This commit is contained in:
tony_all
2023-04-16 19:13:27 +08:00
parent fdaa4a57eb
commit 4b65a2459b
7 changed files with 31 additions and 12 deletions
@@ -8,6 +8,7 @@ import cc.maxmc.msm.common.utils.pluginScope
import cc.maxmc.msm.parent.misc.ChildBungee
import io.netty.channel.Channel
import kotlinx.coroutines.launch
import java.util.*
import java.util.concurrent.CopyOnWriteArrayList
object ChildManager {
@@ -32,9 +33,10 @@ object ChildManager {
}
fun requestChild(type: String): ChildBungee {
val uid = UUID.randomUUID()
children.forEach {
val ports = it.getAvailablePorts()
log("${ports.size} ports: $ports")
log("[${uid.toString().substring(0..8)}] ${it.channel.remoteAddress()} has ${ports.size} ports: $ports")
}
return children.filter { it.getAvailablePorts().isNotEmpty() && it.types.contains(type) }
.maxByOrNull { it.getAvailablePorts().size } ?: throw IllegalStateException("当前无可用端口开启新服务器.")
@@ -35,11 +35,9 @@ object ServerManager {
if (!serverMap.containsKey(it)) {
serverMap[it] = ArrayList()
}
if (serverMap[it]!!.size <= 2) {
pluginScope.launch {
repeat(2) { _ ->
requestServer(it)
}
if (serverMap[it]!!.size < 2) {
repeat(2) { _ ->
requestServer(it)
}
}
}
@@ -82,6 +80,8 @@ object ServerManager {
val child = ChildManager.requestChild(type)
val list = serverMap[type]!!
val server = child.requestServer(type)
if (server.uid == ServerInfo.NULL_UID)
list.add(server)
childMap[server] = child
return server
@@ -5,6 +5,7 @@ import cc.maxmc.msm.common.network.BungeePacket
import cc.maxmc.msm.common.network.packet.CPacketRequestServer
import cc.maxmc.msm.common.network.packet.PPacketServerStarted
import cc.maxmc.msm.common.utils.awaitPacket
import cc.maxmc.msm.common.utils.log
import io.netty.channel.Channel
import java.net.InetSocketAddress
import java.util.*
@@ -28,6 +29,10 @@ class ChildBungee(
val packet = awaitPacket(PPacketServerStarted::class.java) { ch, packet ->
ch == channel && packet.serverInfo == server
}
if (packet.serverInfo.server == null) {
log("§c| §7服务器启动失败,请检查子BC端 §c(${channel.remoteAddress()})§7 日志。")
return ServerInfo()
}
usedPorts += port
return packet.serverInfo
}