From 8c41f190c499aa12b7fd70144ff6e727e7e38bed Mon Sep 17 00:00:00 2001 From: TONY_All Date: Wed, 15 Mar 2023 18:56:35 +0800 Subject: [PATCH] sync --- .../cc/maxmc/msm/child/MultiServerMan.kt | 6 +++--- .../cc/maxmc/msm/child}/command/Send.kt | 7 +++++-- .../cc/maxmc/msm/child/netty/NetClient.kt | 21 ++++++++++++------- .../common/network/ClusterPacketHandler.kt | 6 ++---- .../cc/maxmc/msm/common}/utils/Logging.kt | 2 +- .../kotlin/cc/maxmc/msm/common/utils/Netty.kt | 6 +++--- .../cc/maxmc/msm/parent/MultiServerMan.kt | 8 ++++--- .../msm/parent}/listener/PacketListener.kt | 8 +++---- .../cc/maxmc/msm/parent/misc/ChildBungee.kt | 4 +++- .../cc/maxmc/msm/parent/netty/NetManager.kt | 16 ++++++++++---- .../msm/parent/netty/ParentPacketHandler.kt | 11 +++++++++- parent-side/src/main/resources/settings.yml | 3 +++ 12 files changed, 65 insertions(+), 33 deletions(-) rename {parent-side/src/main/kotlin/cc/maxmc/msm/parent => child-side/src/main/kotlin/cc/maxmc/msm/child}/command/Send.kt (61%) rename child-side/src/main/kotlin/cc/maxmc/msm/child/netty/ClientPacketHandler.kt => common/src/main/kotlin/cc/maxmc/msm/common/network/ClusterPacketHandler.kt (65%) rename {child-side/src/main/kotlin/cc/maxmc/msm/child => common/src/main/kotlin/cc/maxmc/msm/common}/utils/Logging.kt (83%) rename {child-side/src/main/kotlin/cc/maxmc/msm/child => parent-side/src/main/kotlin/cc/maxmc/msm/parent}/listener/PacketListener.kt (74%) create mode 100644 parent-side/src/main/resources/settings.yml diff --git a/child-side/src/main/kotlin/cc/maxmc/msm/child/MultiServerMan.kt b/child-side/src/main/kotlin/cc/maxmc/msm/child/MultiServerMan.kt index 62a1b14..7a506c5 100644 --- a/child-side/src/main/kotlin/cc/maxmc/msm/child/MultiServerMan.kt +++ b/child-side/src/main/kotlin/cc/maxmc/msm/child/MultiServerMan.kt @@ -1,6 +1,6 @@ package cc.maxmc.msm.child -import cc.maxmc.msm.child.listener.PacketListener +import cc.maxmc.msm.child.command.Send import cc.maxmc.msm.child.netty.NetClient import net.md_5.bungee.api.ProxyServer import net.md_5.bungee.api.plugin.Plugin @@ -11,8 +11,8 @@ class MultiServerMan : Plugin() { } override fun onEnable() { - ProxyServer.getInstance().pluginManager.registerListener(this, PacketListener) - NetClient + ProxyServer.getInstance().pluginManager.registerCommand(this, Send) + NetClient.start() } override fun onDisable() { diff --git a/parent-side/src/main/kotlin/cc/maxmc/msm/parent/command/Send.kt b/child-side/src/main/kotlin/cc/maxmc/msm/child/command/Send.kt similarity index 61% rename from parent-side/src/main/kotlin/cc/maxmc/msm/parent/command/Send.kt rename to child-side/src/main/kotlin/cc/maxmc/msm/child/command/Send.kt index 9352b6c..c746a75 100644 --- a/parent-side/src/main/kotlin/cc/maxmc/msm/parent/command/Send.kt +++ b/child-side/src/main/kotlin/cc/maxmc/msm/child/command/Send.kt @@ -1,5 +1,7 @@ -package cc.maxmc.msm.parent.command +package cc.maxmc.msm.child.command +import cc.maxmc.msm.child.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 import net.md_5.bungee.api.plugin.Command @@ -7,7 +9,8 @@ import net.md_5.bungee.api.plugin.Command object Send : Command("debugP") { override fun execute(sender: CommandSender, args: Array) { val content = args.joinToString(" ") - + val packet = PPacketDebug(content) + NetClient.sendPacket(packet) sender.sendMessage(TextComponent("Success.")) } } \ No newline at end of file diff --git a/child-side/src/main/kotlin/cc/maxmc/msm/child/netty/NetClient.kt b/child-side/src/main/kotlin/cc/maxmc/msm/child/netty/NetClient.kt index 4bc5eb0..ebd8bd6 100644 --- a/child-side/src/main/kotlin/cc/maxmc/msm/child/netty/NetClient.kt +++ b/child-side/src/main/kotlin/cc/maxmc/msm/child/netty/NetClient.kt @@ -1,32 +1,39 @@ package cc.maxmc.msm.child.netty import cc.maxmc.msm.child.settings.Settings -import cc.maxmc.msm.child.utils.log +import cc.maxmc.msm.common.network.BungeePacket +import cc.maxmc.msm.common.utils.log import cc.maxmc.msm.common.utils.pipelineInit import io.netty.bootstrap.Bootstrap +import io.netty.channel.Channel import io.netty.channel.ChannelFutureListener import io.netty.channel.ChannelOption import io.netty.channel.nio.NioEventLoopGroup +import io.netty.channel.socket.nio.NioSocketChannel object NetClient { private val loop = NioEventLoopGroup() + lateinit var channel: Channel + private set - init { - start() - } - - private fun start() { + fun start() { val parent = Settings.Parent Bootstrap() + .channel(NioSocketChannel::class.java) .group(loop) - .handler(pipelineInit(ClientPacketHandler)) + .handler(pipelineInit()) .option(ChannelOption.TCP_NODELAY, true) .remoteAddress(parent.address, parent.port) .connect().addListener(ChannelFutureListener { + channel = it.channel() log("§a| §7成功连接到集群的主节点. (${it.channel().remoteAddress()})") }) } + fun sendPacket(packet: BungeePacket) { + channel.writeAndFlush(packet) + } + fun shutdown() { loop.shutdownGracefully().sync() } diff --git a/child-side/src/main/kotlin/cc/maxmc/msm/child/netty/ClientPacketHandler.kt b/common/src/main/kotlin/cc/maxmc/msm/common/network/ClusterPacketHandler.kt similarity index 65% rename from child-side/src/main/kotlin/cc/maxmc/msm/child/netty/ClientPacketHandler.kt rename to common/src/main/kotlin/cc/maxmc/msm/common/network/ClusterPacketHandler.kt index ead5ffc..b19c394 100644 --- a/child-side/src/main/kotlin/cc/maxmc/msm/child/netty/ClientPacketHandler.kt +++ b/common/src/main/kotlin/cc/maxmc/msm/common/network/ClusterPacketHandler.kt @@ -1,13 +1,11 @@ -package cc.maxmc.msm.child.netty +package cc.maxmc.msm.common.network import cc.maxmc.msm.common.event.PacketReceiveEvent -import cc.maxmc.msm.common.network.BungeePacket import io.netty.channel.ChannelHandlerContext import io.netty.channel.SimpleChannelInboundHandler -object ClientPacketHandler : SimpleChannelInboundHandler() { +object ClusterPacketHandler : SimpleChannelInboundHandler() { override fun channelRead0(ctx: ChannelHandlerContext, msg: BungeePacket) { PacketReceiveEvent(ctx.channel(), msg).callEvent() } - } \ No newline at end of file diff --git a/child-side/src/main/kotlin/cc/maxmc/msm/child/utils/Logging.kt b/common/src/main/kotlin/cc/maxmc/msm/common/utils/Logging.kt similarity index 83% rename from child-side/src/main/kotlin/cc/maxmc/msm/child/utils/Logging.kt rename to common/src/main/kotlin/cc/maxmc/msm/common/utils/Logging.kt index cc34b7f..1927970 100644 --- a/child-side/src/main/kotlin/cc/maxmc/msm/child/utils/Logging.kt +++ b/common/src/main/kotlin/cc/maxmc/msm/common/utils/Logging.kt @@ -1,4 +1,4 @@ -package cc.maxmc.msm.child.utils +package cc.maxmc.msm.common.utils import net.md_5.bungee.api.ProxyServer import net.md_5.bungee.api.chat.TextComponent diff --git a/common/src/main/kotlin/cc/maxmc/msm/common/utils/Netty.kt b/common/src/main/kotlin/cc/maxmc/msm/common/utils/Netty.kt index 111d1a8..c483cb2 100644 --- a/common/src/main/kotlin/cc/maxmc/msm/common/utils/Netty.kt +++ b/common/src/main/kotlin/cc/maxmc/msm/common/utils/Netty.kt @@ -1,10 +1,10 @@ package cc.maxmc.msm.common.utils +import cc.maxmc.msm.common.network.ClusterPacketHandler import cc.maxmc.msm.common.network.netty.ClusterMsgCodec import cc.maxmc.msm.common.network.netty.NetworkRegistry import io.netty.channel.Channel import io.netty.channel.ChannelInitializer -import io.netty.channel.SimpleChannelInboundHandler import io.netty.channel.socket.SocketChannel import net.md_5.bungee.protocol.Varint21FrameDecoder import net.md_5.bungee.protocol.Varint21LengthFieldPrepender @@ -15,9 +15,9 @@ fun channelInit(initializer: C.() -> Unit): ChannelInitializer } } -fun pipelineInit(packetHandler: SimpleChannelInboundHandler) = channelInit { +fun pipelineInit() = channelInit { pipeline().addLast("frame_decoder", Varint21FrameDecoder()) pipeline().addLast("codec", ClusterMsgCodec(NetworkRegistry.PacketDirection.CHILD_BOUND)) pipeline().addLast("frame_prepender", Varint21LengthFieldPrepender()) - pipeline().addLast("packet_handler", packetHandler) + pipeline().addLast("packet_handler", ClusterPacketHandler) } \ No newline at end of file diff --git a/parent-side/src/main/kotlin/cc/maxmc/msm/parent/MultiServerMan.kt b/parent-side/src/main/kotlin/cc/maxmc/msm/parent/MultiServerMan.kt index 422109b..cd79d71 100644 --- a/parent-side/src/main/kotlin/cc/maxmc/msm/parent/MultiServerMan.kt +++ b/parent-side/src/main/kotlin/cc/maxmc/msm/parent/MultiServerMan.kt @@ -1,6 +1,7 @@ package cc.maxmc.msm.parent -import cc.maxmc.msm.parent.command.Send +import cc.maxmc.msm.parent.listener.PacketListener +import cc.maxmc.msm.parent.netty.NetManager import net.md_5.bungee.api.ProxyServer import net.md_5.bungee.api.plugin.Plugin @@ -8,11 +9,12 @@ class MultiServerMan : Plugin() { override fun onEnable() { instance = this - ProxyServer.getInstance().pluginManager.registerCommand(this, Send) + ProxyServer.getInstance().pluginManager.registerListener(this, PacketListener) + NetManager.startServer() } override fun onDisable() { - + NetManager.shutdownServer() } companion object { diff --git a/child-side/src/main/kotlin/cc/maxmc/msm/child/listener/PacketListener.kt b/parent-side/src/main/kotlin/cc/maxmc/msm/parent/listener/PacketListener.kt similarity index 74% rename from child-side/src/main/kotlin/cc/maxmc/msm/child/listener/PacketListener.kt rename to parent-side/src/main/kotlin/cc/maxmc/msm/parent/listener/PacketListener.kt index 946967a..814ffb4 100644 --- a/child-side/src/main/kotlin/cc/maxmc/msm/child/listener/PacketListener.kt +++ b/parent-side/src/main/kotlin/cc/maxmc/msm/parent/listener/PacketListener.kt @@ -1,9 +1,9 @@ -package cc.maxmc.msm.child.listener +package cc.maxmc.msm.parent.listener -import cc.maxmc.msm.child.utils.log import cc.maxmc.msm.common.event.PacketReceiveEvent import cc.maxmc.msm.common.network.packet.CPacketDebug import cc.maxmc.msm.common.network.packet.PPacketDebug +import cc.maxmc.msm.common.utils.log import net.md_5.bungee.api.plugin.Listener import net.md_5.bungee.event.EventHandler @@ -11,10 +11,10 @@ object PacketListener : Listener { @EventHandler fun onPacket(evt: PacketReceiveEvent) { val packet = evt.packet - if (packet !is CPacketDebug) { + if (packet !is PPacketDebug) { return } log("§fDEBUG | §7收到: \"${packet.content}\"") - evt.channel.writeAndFlush(PPacketDebug("(${evt.channel.localAddress()}) - ${packet.content}")) + evt.channel.writeAndFlush(CPacketDebug("(${evt.channel.localAddress()}) - ${packet.content}")) } } \ No newline at end of file diff --git a/parent-side/src/main/kotlin/cc/maxmc/msm/parent/misc/ChildBungee.kt b/parent-side/src/main/kotlin/cc/maxmc/msm/parent/misc/ChildBungee.kt index 42d4d57..3c495c6 100644 --- a/parent-side/src/main/kotlin/cc/maxmc/msm/parent/misc/ChildBungee.kt +++ b/parent-side/src/main/kotlin/cc/maxmc/msm/parent/misc/ChildBungee.kt @@ -1,3 +1,5 @@ package cc.maxmc.msm.parent.misc -data class ChildBungee(val addr: String) +import io.netty.channel.Channel + +data class ChildBungee(val channel: Channel) diff --git a/parent-side/src/main/kotlin/cc/maxmc/msm/parent/netty/NetManager.kt b/parent-side/src/main/kotlin/cc/maxmc/msm/parent/netty/NetManager.kt index cb60dcc..90b80c3 100644 --- a/parent-side/src/main/kotlin/cc/maxmc/msm/parent/netty/NetManager.kt +++ b/parent-side/src/main/kotlin/cc/maxmc/msm/parent/netty/NetManager.kt @@ -1,23 +1,31 @@ package cc.maxmc.msm.parent.netty +import cc.maxmc.msm.common.utils.log import cc.maxmc.msm.common.utils.pipelineInit import cc.maxmc.msm.parent.settings.Settings import io.netty.bootstrap.ServerBootstrap +import io.netty.channel.ChannelFutureListener import io.netty.channel.nio.NioEventLoopGroup +import io.netty.channel.socket.nio.NioServerSocketChannel object NetManager { val parentGroup = NioEventLoopGroup() val childGroup = NioEventLoopGroup() - init { - - } - fun startServer() { ServerBootstrap() + .channel(NioServerSocketChannel::class.java) .group(parentGroup, childGroup) .childHandler(pipelineInit()) .bind(Settings.serverPort) + .addListener(ChannelFutureListener { + log("§a| §7集群主服务端启动成功. ${it.channel().localAddress()}") + }) + } + + fun shutdownServer() { + parentGroup.shutdownGracefully().sync() + childGroup.shutdownGracefully().sync() } } \ No newline at end of file diff --git a/parent-side/src/main/kotlin/cc/maxmc/msm/parent/netty/ParentPacketHandler.kt b/parent-side/src/main/kotlin/cc/maxmc/msm/parent/netty/ParentPacketHandler.kt index 9fc2e1a..5710588 100644 --- a/parent-side/src/main/kotlin/cc/maxmc/msm/parent/netty/ParentPacketHandler.kt +++ b/parent-side/src/main/kotlin/cc/maxmc/msm/parent/netty/ParentPacketHandler.kt @@ -1,4 +1,13 @@ package cc.maxmc.msm.parent.netty -object ParentPacketHandler { +import cc.maxmc.msm.common.event.PacketReceiveEvent +import cc.maxmc.msm.common.network.BungeePacket +import io.netty.channel.ChannelHandlerContext +import io.netty.channel.SimpleChannelInboundHandler + +object ParentPacketHandler : SimpleChannelInboundHandler() { + override fun channelRead0(ctx: ChannelHandlerContext, msg: BungeePacket) { + PacketReceiveEvent(ctx.channel(), msg).callEvent() + } + } \ No newline at end of file diff --git a/parent-side/src/main/resources/settings.yml b/parent-side/src/main/resources/settings.yml new file mode 100644 index 0000000..4f36cc3 --- /dev/null +++ b/parent-side/src/main/resources/settings.yml @@ -0,0 +1,3 @@ +parent: + address: 127.0.0.1 + port: 23333