This commit is contained in:
TONY_All 2023-05-04 21:18:04 +08:00
parent 4b65a2459b
commit f971211e33
34 changed files with 90 additions and 87 deletions

View File

@ -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 {

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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()
}
}
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,3 @@
name: Controlled
main: cc.maxmc.msm.controlled.MultiServerMan
author: MistyRain

View File

@ -3,7 +3,7 @@ plugins {
id("com.github.johnrengelman.shadow")
}
group = "cc.maxmc.msm.parent"
group = "cc.maxmc.msm.mastercontrol"
repositories {
mavenCentral()

View File

@ -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() {

View File

@ -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 {

View File

@ -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

View File

@ -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)

View File

@ -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.*

View File

@ -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

View File

@ -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 {

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,3 @@
name: MasterControl
main: cc.maxmc.msm.mastercontrol.MultiServerMan
author: MistyRain

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"])
}
}
}

View File

@ -3,7 +3,7 @@ plugins {
}
group = "cc.maxmc.msm"
version = "1.0"
version = "1.1.0"
subprojects {

View File

@ -1,3 +0,0 @@
name: MultiServerMan-Child
main: cc.maxmc.msm.child.MultiServerMan
author: TONY_All

View File

@ -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()

View File

@ -1,3 +0,0 @@
name: MultiServerMan-Parent
main: cc.maxmc.msm.parent.MultiServerMan
author: TONY_All

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)