sync
This commit is contained in:
parent
a027273378
commit
8c41f190c4
|
|
@ -1,6 +1,6 @@
|
||||||
package cc.maxmc.msm.child
|
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 cc.maxmc.msm.child.netty.NetClient
|
||||||
import net.md_5.bungee.api.ProxyServer
|
import net.md_5.bungee.api.ProxyServer
|
||||||
import net.md_5.bungee.api.plugin.Plugin
|
import net.md_5.bungee.api.plugin.Plugin
|
||||||
|
|
@ -11,8 +11,8 @@ class MultiServerMan : Plugin() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onEnable() {
|
override fun onEnable() {
|
||||||
ProxyServer.getInstance().pluginManager.registerListener(this, PacketListener)
|
ProxyServer.getInstance().pluginManager.registerCommand(this, Send)
|
||||||
NetClient
|
NetClient.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDisable() {
|
override fun onDisable() {
|
||||||
|
|
|
||||||
|
|
@ -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.CommandSender
|
||||||
import net.md_5.bungee.api.chat.TextComponent
|
import net.md_5.bungee.api.chat.TextComponent
|
||||||
import net.md_5.bungee.api.plugin.Command
|
import net.md_5.bungee.api.plugin.Command
|
||||||
|
|
@ -7,7 +9,8 @@ import net.md_5.bungee.api.plugin.Command
|
||||||
object Send : Command("debugP") {
|
object Send : Command("debugP") {
|
||||||
override fun execute(sender: CommandSender, args: Array<out String>) {
|
override fun execute(sender: CommandSender, args: Array<out String>) {
|
||||||
val content = args.joinToString(" ")
|
val content = args.joinToString(" ")
|
||||||
|
val packet = PPacketDebug(content)
|
||||||
|
NetClient.sendPacket(packet)
|
||||||
sender.sendMessage(TextComponent("Success."))
|
sender.sendMessage(TextComponent("Success."))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,32 +1,39 @@
|
||||||
package cc.maxmc.msm.child.netty
|
package cc.maxmc.msm.child.netty
|
||||||
|
|
||||||
import cc.maxmc.msm.child.settings.Settings
|
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 cc.maxmc.msm.common.utils.pipelineInit
|
||||||
import io.netty.bootstrap.Bootstrap
|
import io.netty.bootstrap.Bootstrap
|
||||||
|
import io.netty.channel.Channel
|
||||||
import io.netty.channel.ChannelFutureListener
|
import io.netty.channel.ChannelFutureListener
|
||||||
import io.netty.channel.ChannelOption
|
import io.netty.channel.ChannelOption
|
||||||
import io.netty.channel.nio.NioEventLoopGroup
|
import io.netty.channel.nio.NioEventLoopGroup
|
||||||
|
import io.netty.channel.socket.nio.NioSocketChannel
|
||||||
|
|
||||||
object NetClient {
|
object NetClient {
|
||||||
private val loop = NioEventLoopGroup()
|
private val loop = NioEventLoopGroup()
|
||||||
|
lateinit var channel: Channel
|
||||||
|
private set
|
||||||
|
|
||||||
init {
|
fun start() {
|
||||||
start()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun start() {
|
|
||||||
val parent = Settings.Parent
|
val parent = Settings.Parent
|
||||||
Bootstrap()
|
Bootstrap()
|
||||||
|
.channel(NioSocketChannel::class.java)
|
||||||
.group(loop)
|
.group(loop)
|
||||||
.handler(pipelineInit(ClientPacketHandler))
|
.handler(pipelineInit())
|
||||||
.option(ChannelOption.TCP_NODELAY, true)
|
.option(ChannelOption.TCP_NODELAY, true)
|
||||||
.remoteAddress(parent.address, parent.port)
|
.remoteAddress(parent.address, parent.port)
|
||||||
.connect().addListener(ChannelFutureListener {
|
.connect().addListener(ChannelFutureListener {
|
||||||
|
channel = it.channel()
|
||||||
log("§a| §7成功连接到集群的主节点. (${it.channel().remoteAddress()})")
|
log("§a| §7成功连接到集群的主节点. (${it.channel().remoteAddress()})")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun sendPacket(packet: BungeePacket) {
|
||||||
|
channel.writeAndFlush(packet)
|
||||||
|
}
|
||||||
|
|
||||||
fun shutdown() {
|
fun shutdown() {
|
||||||
loop.shutdownGracefully().sync()
|
loop.shutdownGracefully().sync()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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.event.PacketReceiveEvent
|
||||||
import cc.maxmc.msm.common.network.BungeePacket
|
|
||||||
import io.netty.channel.ChannelHandlerContext
|
import io.netty.channel.ChannelHandlerContext
|
||||||
import io.netty.channel.SimpleChannelInboundHandler
|
import io.netty.channel.SimpleChannelInboundHandler
|
||||||
|
|
||||||
object ClientPacketHandler : SimpleChannelInboundHandler<BungeePacket>() {
|
object ClusterPacketHandler : SimpleChannelInboundHandler<BungeePacket>() {
|
||||||
override fun channelRead0(ctx: ChannelHandlerContext, msg: BungeePacket) {
|
override fun channelRead0(ctx: ChannelHandlerContext, msg: BungeePacket) {
|
||||||
PacketReceiveEvent(ctx.channel(), msg).callEvent()
|
PacketReceiveEvent(ctx.channel(), msg).callEvent()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -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.ProxyServer
|
||||||
import net.md_5.bungee.api.chat.TextComponent
|
import net.md_5.bungee.api.chat.TextComponent
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
package cc.maxmc.msm.common.utils
|
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.ClusterMsgCodec
|
||||||
import cc.maxmc.msm.common.network.netty.NetworkRegistry
|
import cc.maxmc.msm.common.network.netty.NetworkRegistry
|
||||||
import io.netty.channel.Channel
|
import io.netty.channel.Channel
|
||||||
import io.netty.channel.ChannelInitializer
|
import io.netty.channel.ChannelInitializer
|
||||||
import io.netty.channel.SimpleChannelInboundHandler
|
|
||||||
import io.netty.channel.socket.SocketChannel
|
import io.netty.channel.socket.SocketChannel
|
||||||
import net.md_5.bungee.protocol.Varint21FrameDecoder
|
import net.md_5.bungee.protocol.Varint21FrameDecoder
|
||||||
import net.md_5.bungee.protocol.Varint21LengthFieldPrepender
|
import net.md_5.bungee.protocol.Varint21LengthFieldPrepender
|
||||||
|
|
@ -15,9 +15,9 @@ fun <C : Channel> channelInit(initializer: C.() -> Unit): ChannelInitializer<C>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <I> pipelineInit(packetHandler: SimpleChannelInboundHandler<I>) = channelInit<SocketChannel> {
|
fun pipelineInit() = channelInit<SocketChannel> {
|
||||||
pipeline().addLast("frame_decoder", Varint21FrameDecoder())
|
pipeline().addLast("frame_decoder", Varint21FrameDecoder())
|
||||||
pipeline().addLast("codec", ClusterMsgCodec(NetworkRegistry.PacketDirection.CHILD_BOUND))
|
pipeline().addLast("codec", ClusterMsgCodec(NetworkRegistry.PacketDirection.CHILD_BOUND))
|
||||||
pipeline().addLast("frame_prepender", Varint21LengthFieldPrepender())
|
pipeline().addLast("frame_prepender", Varint21LengthFieldPrepender())
|
||||||
pipeline().addLast("packet_handler", packetHandler)
|
pipeline().addLast("packet_handler", ClusterPacketHandler)
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package cc.maxmc.msm.parent
|
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.ProxyServer
|
||||||
import net.md_5.bungee.api.plugin.Plugin
|
import net.md_5.bungee.api.plugin.Plugin
|
||||||
|
|
||||||
|
|
@ -8,11 +9,12 @@ class MultiServerMan : Plugin() {
|
||||||
|
|
||||||
override fun onEnable() {
|
override fun onEnable() {
|
||||||
instance = this
|
instance = this
|
||||||
ProxyServer.getInstance().pluginManager.registerCommand(this, Send)
|
ProxyServer.getInstance().pluginManager.registerListener(this, PacketListener)
|
||||||
|
NetManager.startServer()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDisable() {
|
override fun onDisable() {
|
||||||
|
NetManager.shutdownServer()
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
|
||||||
|
|
@ -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.event.PacketReceiveEvent
|
||||||
import cc.maxmc.msm.common.network.packet.CPacketDebug
|
import cc.maxmc.msm.common.network.packet.CPacketDebug
|
||||||
import cc.maxmc.msm.common.network.packet.PPacketDebug
|
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.api.plugin.Listener
|
||||||
import net.md_5.bungee.event.EventHandler
|
import net.md_5.bungee.event.EventHandler
|
||||||
|
|
||||||
|
|
@ -11,10 +11,10 @@ object PacketListener : Listener {
|
||||||
@EventHandler
|
@EventHandler
|
||||||
fun onPacket(evt: PacketReceiveEvent) {
|
fun onPacket(evt: PacketReceiveEvent) {
|
||||||
val packet = evt.packet
|
val packet = evt.packet
|
||||||
if (packet !is CPacketDebug) {
|
if (packet !is PPacketDebug) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
log("§fDEBUG | §7收到: \"${packet.content}\"")
|
log("§fDEBUG | §7收到: \"${packet.content}\"")
|
||||||
evt.channel.writeAndFlush(PPacketDebug("(${evt.channel.localAddress()}) - ${packet.content}"))
|
evt.channel.writeAndFlush(CPacketDebug("(${evt.channel.localAddress()}) - ${packet.content}"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
package cc.maxmc.msm.parent.misc
|
package cc.maxmc.msm.parent.misc
|
||||||
|
|
||||||
data class ChildBungee(val addr: String)
|
import io.netty.channel.Channel
|
||||||
|
|
||||||
|
data class ChildBungee(val channel: Channel)
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,31 @@
|
||||||
package cc.maxmc.msm.parent.netty
|
package cc.maxmc.msm.parent.netty
|
||||||
|
|
||||||
|
import cc.maxmc.msm.common.utils.log
|
||||||
import cc.maxmc.msm.common.utils.pipelineInit
|
import cc.maxmc.msm.common.utils.pipelineInit
|
||||||
import cc.maxmc.msm.parent.settings.Settings
|
import cc.maxmc.msm.parent.settings.Settings
|
||||||
import io.netty.bootstrap.ServerBootstrap
|
import io.netty.bootstrap.ServerBootstrap
|
||||||
|
import io.netty.channel.ChannelFutureListener
|
||||||
import io.netty.channel.nio.NioEventLoopGroup
|
import io.netty.channel.nio.NioEventLoopGroup
|
||||||
|
import io.netty.channel.socket.nio.NioServerSocketChannel
|
||||||
|
|
||||||
object NetManager {
|
object NetManager {
|
||||||
val parentGroup = NioEventLoopGroup()
|
val parentGroup = NioEventLoopGroup()
|
||||||
val childGroup = NioEventLoopGroup()
|
val childGroup = NioEventLoopGroup()
|
||||||
|
|
||||||
init {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fun startServer() {
|
fun startServer() {
|
||||||
ServerBootstrap()
|
ServerBootstrap()
|
||||||
|
.channel(NioServerSocketChannel::class.java)
|
||||||
.group(parentGroup, childGroup)
|
.group(parentGroup, childGroup)
|
||||||
.childHandler(pipelineInit())
|
.childHandler(pipelineInit())
|
||||||
.bind(Settings.serverPort)
|
.bind(Settings.serverPort)
|
||||||
|
.addListener(ChannelFutureListener {
|
||||||
|
log("§a| §7集群主服务端启动成功. ${it.channel().localAddress()}")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fun shutdownServer() {
|
||||||
|
parentGroup.shutdownGracefully().sync()
|
||||||
|
childGroup.shutdownGracefully().sync()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,13 @@
|
||||||
package cc.maxmc.msm.parent.netty
|
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<BungeePacket>() {
|
||||||
|
override fun channelRead0(ctx: ChannelHandlerContext, msg: BungeePacket) {
|
||||||
|
PacketReceiveEvent(ctx.channel(), msg).callEvent()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
parent:
|
||||||
|
address: 127.0.0.1
|
||||||
|
port: 23333
|
||||||
Loading…
Reference in New Issue