This commit is contained in:
2023-05-04 21:18:04 +08:00
parent 4b65a2459b
commit f971211e33
34 changed files with 90 additions and 87 deletions
@@ -3,7 +3,7 @@ plugins {
id("com.github.johnrengelman.shadow")
}
group = "cc.maxmc.msm.child"
group = "cc.maxmc.msm.controlled"
repositories {
mavenCentral()
@@ -14,9 +14,8 @@ dependencies {
implementation(kotlin("stdlib"))
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.0-Beta")
implementation(project(":common"))
implementation("io.netty:netty-all:4.1.90.Final")
@Suppress("VulnerableLibrariesLocal")
implementation("io.github.waterfallmc:waterfall-api:1.19-R0.1-SNAPSHOT")
compileOnly("io.netty:netty-all:4.1.90.Final")
@Suppress("VulnerableLibrariesLocal") compileOnly("io.github.waterfallmc:waterfall-api:1.19-R0.1-SNAPSHOT")
}
tasks.shadowJar {
@@ -1,14 +1,14 @@
package cc.maxmc.msm.child
package cc.maxmc.msm.controlled
import cc.maxmc.msm.api.MultiServerManAPIProvider
import cc.maxmc.msm.child.api.APIImpl
import cc.maxmc.msm.child.listener.APIPacketListener
import cc.maxmc.msm.child.command.Api
import cc.maxmc.msm.child.command.Send
import cc.maxmc.msm.child.listener.ProtocolListener
import cc.maxmc.msm.child.netty.NetClient
import cc.maxmc.msm.child.settings.Settings
import cc.maxmc.msm.child.settings.SettingsReader
import cc.maxmc.msm.controlled.api.APIImpl
import cc.maxmc.msm.controlled.listener.APIPacketListener
import cc.maxmc.msm.controlled.command.Api
import cc.maxmc.msm.controlled.command.Send
import cc.maxmc.msm.controlled.listener.ProtocolListener
import cc.maxmc.msm.controlled.netty.NetClient
import cc.maxmc.msm.controlled.settings.Settings
import cc.maxmc.msm.controlled.settings.SettingsReader
import cc.maxmc.msm.common.network.netty.NetworkRegistry
import net.md_5.bungee.api.ProxyServer
import net.md_5.bungee.api.plugin.Plugin
@@ -1,8 +1,8 @@
package cc.maxmc.msm.child.api
package cc.maxmc.msm.controlled.api
import cc.maxmc.msm.api.MultiServerManAPI
import cc.maxmc.msm.api.misc.MatchInfo
import cc.maxmc.msm.child.netty.NetClient
import cc.maxmc.msm.controlled.netty.NetClient
import cc.maxmc.msm.common.network.packet.PPacketAPICall
import java.util.*
import java.util.concurrent.CompletableFuture
@@ -1,4 +1,4 @@
package cc.maxmc.msm.child.command
package cc.maxmc.msm.controlled.command
import cc.maxmc.msm.api.MultiServerManAPIProvider
import net.md_5.bungee.api.CommandSender
@@ -1,6 +1,6 @@
package cc.maxmc.msm.child.command
package cc.maxmc.msm.controlled.command
import cc.maxmc.msm.child.netty.NetClient
import cc.maxmc.msm.controlled.netty.NetClient
import cc.maxmc.msm.common.network.packet.PPacketDebug
import net.md_5.bungee.api.CommandSender
import net.md_5.bungee.api.chat.TextComponent
@@ -1,6 +1,6 @@
package cc.maxmc.msm.child.listener
package cc.maxmc.msm.controlled.listener
import cc.maxmc.msm.child.api.APIImpl
import cc.maxmc.msm.controlled.api.APIImpl
import cc.maxmc.msm.common.event.PacketReceiveEvent
import cc.maxmc.msm.common.network.packet.CPacketAPICallback
import net.md_5.bungee.api.plugin.Listener
@@ -1,9 +1,9 @@
package cc.maxmc.msm.child.listener
package cc.maxmc.msm.controlled.listener
import cc.maxmc.msm.child.MultiServerMan
import cc.maxmc.msm.child.misc.SubServer
import cc.maxmc.msm.child.netty.NetClient
import cc.maxmc.msm.child.settings.Settings
import cc.maxmc.msm.controlled.MultiServerMan
import cc.maxmc.msm.controlled.misc.SubServer
import cc.maxmc.msm.controlled.netty.NetClient
import cc.maxmc.msm.controlled.settings.Settings
import cc.maxmc.msm.common.event.ChannelInactiveEvent
import cc.maxmc.msm.common.event.PacketReceiveEvent
import cc.maxmc.msm.common.network.packet.*
@@ -47,15 +47,18 @@ object ProtocolListener : Listener {
}
@EventHandler
fun onDisconnect(packet: ChannelInactiveEvent) {
repeat(10) {
log("Remote Disconnected.")
}
fun onDisconnect(evt: ChannelInactiveEvent) {
log("§c| §7与远程服务器断开连接.")
}
@EventHandler
fun onServerEnd(evt: PacketReceiveEvent) {
val packet = evt.packet as? CPacketEndServer ?: return
packet.server
val serverInfo = packet.server
val server =
serverCache[serverInfo.uid] ?: throw IllegalAccessError("Server ($serverInfo) is not in this sub bungee.")
pluginScope.launch {
server.cleanup()
}
}
}
@@ -1,8 +1,8 @@
package cc.maxmc.msm.child.misc
package cc.maxmc.msm.controlled.misc
import cc.maxmc.msm.child.MultiServerMan
import cc.maxmc.msm.child.settings.Settings
import cc.maxmc.msm.child.utils.ScriptRunner
import cc.maxmc.msm.controlled.MultiServerMan
import cc.maxmc.msm.controlled.settings.Settings
import cc.maxmc.msm.controlled.utils.ScriptRunner
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.nio.file.Path
@@ -1,4 +1,4 @@
package cc.maxmc.msm.child.netty
package cc.maxmc.msm.controlled.netty
import cc.maxmc.msm.common.network.BungeePacket
import cc.maxmc.msm.common.network.netty.NetworkRegistry
@@ -1,6 +1,6 @@
package cc.maxmc.msm.child.settings
package cc.maxmc.msm.controlled.settings
import cc.maxmc.msm.child.settings.SettingsReader.config
import cc.maxmc.msm.controlled.settings.SettingsReader.config
object Settings {
val name
@@ -1,6 +1,6 @@
package cc.maxmc.msm.child.settings
package cc.maxmc.msm.controlled.settings
import cc.maxmc.msm.child.MultiServerMan
import cc.maxmc.msm.controlled.MultiServerMan
import net.md_5.bungee.api.ProxyServer
import net.md_5.bungee.api.chat.TextComponent
import net.md_5.bungee.config.Configuration
@@ -1,4 +1,4 @@
package cc.maxmc.msm.child.utils
package cc.maxmc.msm.controlled.utils
import cc.maxmc.msm.common.utils.log
import kotlinx.coroutines.Dispatchers
+3
View File
@@ -0,0 +1,3 @@
name: Controlled
main: cc.maxmc.msm.controlled.MultiServerMan
author: MistyRain
@@ -3,7 +3,7 @@ plugins {
id("com.github.johnrengelman.shadow")
}
group = "cc.maxmc.msm.parent"
group = "cc.maxmc.msm.mastercontrol"
repositories {
mavenCentral()
@@ -1,13 +1,12 @@
package cc.maxmc.msm.parent
package cc.maxmc.msm.mastercontrol
import cc.maxmc.msm.api.MultiServerManAPIProvider
import cc.maxmc.msm.parent.api.APIImpl
import cc.maxmc.msm.parent.listener.PacketListener
import cc.maxmc.msm.parent.manager.MatchManager
import cc.maxmc.msm.parent.manager.ServerManager
import cc.maxmc.msm.parent.netty.NetManager
import cc.maxmc.msm.mastercontrol.api.APIImpl
import cc.maxmc.msm.mastercontrol.listener.PacketListener
import cc.maxmc.msm.mastercontrol.manager.MatchManager
import cc.maxmc.msm.mastercontrol.manager.ServerManager
import cc.maxmc.msm.mastercontrol.netty.NetManager
import net.md_5.bungee.api.ProxyServer
import net.md_5.bungee.api.connection.Server
import net.md_5.bungee.api.plugin.Plugin
class MultiServerMan : Plugin() {
@@ -1,9 +1,9 @@
package cc.maxmc.msm.parent.api
package cc.maxmc.msm.mastercontrol.api
import cc.maxmc.msm.api.MultiServerManAPI
import cc.maxmc.msm.api.misc.MatchInfo
import cc.maxmc.msm.parent.database.SQLDatabase
import cc.maxmc.msm.parent.manager.MatchManager
import cc.maxmc.msm.mastercontrol.database.SQLDatabase
import cc.maxmc.msm.mastercontrol.manager.MatchManager
object APIImpl : MultiServerManAPI {
override fun getServer(type: String, players: List<String>): MatchInfo {
@@ -1,8 +1,8 @@
package cc.maxmc.msm.parent.database
package cc.maxmc.msm.mastercontrol.database
import cc.maxmc.msm.api.misc.MatchInfo
import cc.maxmc.msm.parent.manager.MatchManager
import cc.maxmc.msm.parent.settings.Settings
import cc.maxmc.msm.mastercontrol.manager.MatchManager
import cc.maxmc.msm.mastercontrol.settings.Settings
import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.pool.HikariPool
import java.sql.Timestamp
@@ -1,4 +1,4 @@
package cc.maxmc.msm.parent.listener
package cc.maxmc.msm.mastercontrol.listener
import cc.maxmc.msm.api.MultiServerManAPIProvider
import cc.maxmc.msm.common.event.ChannelActiveEvent
@@ -9,7 +9,7 @@ import cc.maxmc.msm.common.network.packet.CPacketDebug
import cc.maxmc.msm.common.network.packet.PPacketAPICall
import cc.maxmc.msm.common.network.packet.PPacketDebug
import cc.maxmc.msm.common.utils.log
import cc.maxmc.msm.parent.manager.ChildManager
import cc.maxmc.msm.mastercontrol.manager.ChildManager
import net.md_5.bungee.api.plugin.Listener
import net.md_5.bungee.event.EventHandler
@@ -57,6 +57,7 @@ object PacketListener : Listener {
ChildManager.registerChild(evt.channel)
}
@EventHandler
fun onChannelInactive(evt: ChannelInactiveEvent) {
log("§c| §7子BC ${evt.channel.remoteAddress()} 断开连接.")
ChildManager.unregisterChild(evt.channel)
@@ -1,11 +1,11 @@
package cc.maxmc.msm.parent.manager
package cc.maxmc.msm.mastercontrol.manager
import cc.maxmc.msm.common.network.packet.CPacketGetInfo
import cc.maxmc.msm.common.network.packet.PPacketChildInfo
import cc.maxmc.msm.common.utils.awaitPacket
import cc.maxmc.msm.common.utils.log
import cc.maxmc.msm.common.utils.pluginScope
import cc.maxmc.msm.parent.misc.ChildBungee
import cc.maxmc.msm.mastercontrol.misc.ChildBungee
import io.netty.channel.Channel
import kotlinx.coroutines.launch
import java.util.*
@@ -1,14 +1,14 @@
package cc.maxmc.msm.parent.manager
package cc.maxmc.msm.mastercontrol.manager
import cc.maxmc.msm.api.misc.MatchInfo
import cc.maxmc.msm.parent.database.SQLDatabase
import cc.maxmc.msm.mastercontrol.database.SQLDatabase
import java.util.concurrent.ConcurrentHashMap
object MatchManager {
private val matchMap = ConcurrentHashMap<Int, MatchInfo>()
fun requestMatch(type: String, players: List<String>): MatchInfo {
val server = ServerManager.consumeServer(type)
val server = ServerManager.consumeServer(type) ?: return MatchInfo()
val id = SQLDatabase.recordMatch(type, players)
val match = MatchInfo(id, server)
matchMap[id] = match
@@ -1,10 +1,10 @@
package cc.maxmc.msm.parent.manager
package cc.maxmc.msm.mastercontrol.manager
import cc.maxmc.msm.api.misc.ServerInfo
import cc.maxmc.msm.common.network.packet.CPacketEndServer
import cc.maxmc.msm.common.utils.log
import cc.maxmc.msm.common.utils.pluginScope
import cc.maxmc.msm.parent.misc.ChildBungee
import cc.maxmc.msm.mastercontrol.misc.ChildBungee
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.launch
import java.util.*
@@ -44,9 +44,9 @@ object ServerManager {
}
}
fun consumeServer(type: String): ServerInfo {
fun consumeServer(type: String): ServerInfo? {
val servers = getAvailableServers(type)
val info = servers.first()
val info = servers.firstOrNull() ?: return null
info.isAvailable = false
if (servers.size - 1 <= 2) {
pluginScope.launch {
@@ -1,4 +1,4 @@
package cc.maxmc.msm.parent.misc
package cc.maxmc.msm.mastercontrol.misc
import cc.maxmc.msm.api.misc.ServerInfo
import cc.maxmc.msm.common.network.BungeePacket
@@ -1,11 +1,9 @@
package cc.maxmc.msm.parent.netty
package cc.maxmc.msm.mastercontrol.netty
import cc.maxmc.msm.common.network.netty.NetworkRegistry
import cc.maxmc.msm.common.utils.log
import cc.maxmc.msm.common.utils.pipelineInit
import cc.maxmc.msm.parent.manager.MatchManager
import cc.maxmc.msm.parent.manager.ServerManager
import cc.maxmc.msm.parent.settings.Settings
import cc.maxmc.msm.mastercontrol.settings.Settings
import io.netty.bootstrap.ServerBootstrap
import io.netty.channel.ChannelFutureListener
import io.netty.channel.nio.NioEventLoopGroup
@@ -1,6 +1,6 @@
package cc.maxmc.msm.parent.settings
package cc.maxmc.msm.mastercontrol.settings
import cc.maxmc.msm.parent.settings.SettingsReader.config
import cc.maxmc.msm.mastercontrol.settings.SettingsReader.config
object Settings {
val serverPort
@@ -1,6 +1,6 @@
package cc.maxmc.msm.parent.settings
package cc.maxmc.msm.mastercontrol.settings
import cc.maxmc.msm.parent.MultiServerMan
import cc.maxmc.msm.mastercontrol.MultiServerMan
import net.md_5.bungee.api.ProxyServer
import net.md_5.bungee.api.chat.TextComponent
import net.md_5.bungee.config.Configuration
@@ -0,0 +1,3 @@
name: MasterControl
main: cc.maxmc.msm.mastercontrol.MultiServerMan
author: MistyRain
+5 -1
View File
@@ -15,10 +15,14 @@ dependencies {
compileOnly("io.github.waterfallmc:waterfall-api:1.19-R0.1-SNAPSHOT")
}
java {
withSourcesJar()
}
publishing {
publications {
val release by getting(MavenPublication::class) {
artifact(tasks.jar)
from(components["java"])
}
}
}
+1 -1
View File
@@ -3,7 +3,7 @@ plugins {
}
group = "cc.maxmc.msm"
version = "1.0"
version = "1.1.0"
subprojects {
-3
View File
@@ -1,3 +0,0 @@
name: MultiServerMan-Child
main: cc.maxmc.msm.child.MultiServerMan
author: TONY_All
@@ -4,6 +4,7 @@ import cc.maxmc.msm.common.event.ChannelActiveEvent
import cc.maxmc.msm.common.event.ChannelInactiveEvent
import cc.maxmc.msm.common.event.PacketReceiveEvent
import cc.maxmc.msm.common.utils.awaiting
import cc.maxmc.msm.common.utils.log
import io.netty.channel.ChannelHandler.Sharable
import io.netty.channel.ChannelHandlerContext
import io.netty.channel.SimpleChannelInboundHandler
@@ -12,9 +13,7 @@ import kotlin.coroutines.resume
@Sharable
object ClusterPacketHandler : SimpleChannelInboundHandler<BungeePacket>() {
override fun channelRead0(ctx: ChannelHandlerContext, msg: BungeePacket) {
awaiting.filter { it.first == msg::class.java }
.filter { it.second(ctx.channel(), msg) }
.forEach {
awaiting.filter { it.first == msg::class.java }.filter { it.second(ctx.channel(), msg) }.forEach {
it.third.resume(msg)
}
PacketReceiveEvent(ctx.channel(), msg).callEvent()
-3
View File
@@ -1,3 +0,0 @@
name: MultiServerMan-Parent
main: cc.maxmc.msm.parent.MultiServerMan
author: TONY_All
+2 -2
View File
@@ -1,10 +1,10 @@
plugins {
id("com.github.johnrengelman.shadow") version "8.1.0" apply false
kotlin("jvm") version "1.8.10" apply false
kotlin("jvm") version "1.8.20" apply false
}
rootProject.name = "MultiServerMan"
val subProjects = listOf("api", "common", "parent", "child")
val subProjects = listOf("api", "common", "MasterControl", "Controlled")
include(subProjects)