sync
This commit is contained in:
@@ -8,6 +8,7 @@ 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.common.network.netty.NetworkRegistry
|
||||
import net.md_5.bungee.api.ProxyServer
|
||||
import net.md_5.bungee.api.plugin.Plugin
|
||||
@@ -18,13 +19,14 @@ class MultiServerMan : Plugin() {
|
||||
}
|
||||
|
||||
override fun onEnable() {
|
||||
MultiServerManAPIProvider.register(APIImpl)
|
||||
ProxyServer.getInstance().pluginManager.registerCommand(this, Send)
|
||||
ProxyServer.getInstance().pluginManager.registerCommand(this, Api)
|
||||
ProxyServer.getInstance().pluginManager.registerListener(this, APIPacketListener)
|
||||
ProxyServer.getInstance().pluginManager.registerListener(this, ProtocolListener)
|
||||
SettingsReader
|
||||
NetworkRegistry
|
||||
NetClient.init(Settings.Parent.address, Settings.Parent.port)
|
||||
MultiServerManAPIProvider.register(APIImpl)
|
||||
}
|
||||
|
||||
override fun onDisable() {
|
||||
|
||||
@@ -6,10 +6,7 @@ import cc.maxmc.msm.child.netty.NetClient
|
||||
import cc.maxmc.msm.child.settings.Settings
|
||||
import cc.maxmc.msm.common.event.ChannelInactiveEvent
|
||||
import cc.maxmc.msm.common.event.PacketReceiveEvent
|
||||
import cc.maxmc.msm.common.network.packet.CPacketGetInfo
|
||||
import cc.maxmc.msm.common.network.packet.CPacketRequestServer
|
||||
import cc.maxmc.msm.common.network.packet.PPacketChildInfo
|
||||
import cc.maxmc.msm.common.network.packet.PPacketServerStarted
|
||||
import cc.maxmc.msm.common.network.packet.*
|
||||
import cc.maxmc.msm.common.utils.log
|
||||
import cc.maxmc.msm.common.utils.pluginScope
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -21,7 +18,7 @@ import kotlin.io.path.listDirectoryEntries
|
||||
import kotlin.io.path.name
|
||||
|
||||
object ProtocolListener : Listener {
|
||||
val serverCache = HashMap<UUID, SubServer>()
|
||||
private val serverCache = HashMap<UUID, SubServer>()
|
||||
|
||||
@EventHandler
|
||||
fun onGetInfo(packetE: PacketReceiveEvent) {
|
||||
@@ -36,7 +33,9 @@ object ProtocolListener : Listener {
|
||||
fun onRequestServer(packetE: PacketReceiveEvent) {
|
||||
val packet = packetE.packet as? CPacketRequestServer ?: return
|
||||
val serverInfo = packet.serverInfo
|
||||
log("§a| §7正在启动服务器 ${serverInfo.server}")
|
||||
val subServer = SubServer(serverInfo.uid, packet.type, serverInfo.server!!.split(":")[1].toInt())
|
||||
serverCache[serverInfo.uid] = subServer
|
||||
pluginScope.launch {
|
||||
subServer.initServer()
|
||||
subServer.startServer()
|
||||
@@ -44,10 +43,16 @@ object ProtocolListener : Listener {
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun onDisconnect(packet: ChannelInactiveEvent) {
|
||||
repeat(10) {
|
||||
log("Remote Disconnected.")
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun onServerEnd(evt: PacketReceiveEvent) {
|
||||
val packet = evt.packet as? CPacketEndServer ?: return
|
||||
packet.server
|
||||
}
|
||||
}
|
||||
@@ -12,13 +12,14 @@ import kotlin.io.path.copyToRecursively
|
||||
import kotlin.io.path.createDirectories
|
||||
import kotlin.io.path.deleteRecursively
|
||||
|
||||
@Suppress("CanBeParameter", "MemberVisibilityCanBePrivate") // API
|
||||
@OptIn(kotlin.io.path.ExperimentalPathApi::class)
|
||||
class SubServer(
|
||||
val uid: UUID, val type: String, val port: Int, baseFolder: Path = MultiServerMan.instance.dataFolder.toPath()
|
||||
) {
|
||||
private val serverFolder =
|
||||
baseFolder.resolve("cache").resolve(uid.toString().substring(0..7)).also { it.createDirectories() }
|
||||
private val patternFolder = baseFolder.resolve("pattern").resolve(type).also { it.createDirectories() }
|
||||
private val patternFolder = baseFolder.resolve("patterns").resolve(type).also { it.createDirectories() }
|
||||
private val runner = ScriptRunner(serverFolder.resolve("start.sh"))
|
||||
|
||||
suspend fun initServer() = withContext(Dispatchers.IO) {
|
||||
|
||||
@@ -4,14 +4,15 @@ import cc.maxmc.msm.common.network.BungeePacket
|
||||
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.common.utils.pluginScope
|
||||
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
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
object NetClient {
|
||||
private val loop = NioEventLoopGroup()
|
||||
|
||||
@@ -11,8 +11,12 @@ import kotlin.io.path.*
|
||||
object SettingsReader {
|
||||
private val file = MultiServerMan.instance.dataFolder.toPath().resolve("settings.yml")
|
||||
val config: Configuration
|
||||
private val basePatternFolder = MultiServerMan.instance.dataFolder.toPath().resolve("patterns")
|
||||
|
||||
init {
|
||||
if (!basePatternFolder.exists()) {
|
||||
basePatternFolder.createDirectories()
|
||||
}
|
||||
if (!file.exists()) {
|
||||
MultiServerMan.instance.dataFolder.toPath().createDirectories()
|
||||
val stream = MultiServerMan.instance.getResourceAsStream("settings.yml")
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package cc.maxmc.msm.child.utils
|
||||
|
||||
import cc.maxmc.msm.common.utils.log
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import java.nio.file.Path
|
||||
@@ -23,6 +24,7 @@ class ScriptRunner(private val scriptPath: Path) {
|
||||
builder.command("powershell.exe", scriptPath.name, *args)
|
||||
}
|
||||
process = builder.start()
|
||||
log("§c§lProcess Started")
|
||||
thread = thread {
|
||||
while (true) {
|
||||
if (listeners.isEmpty()) {
|
||||
@@ -30,7 +32,6 @@ class ScriptRunner(private val scriptPath: Path) {
|
||||
}
|
||||
var line = ""
|
||||
while (reader.readLine()?.also { line = it } != null) {
|
||||
println(line)
|
||||
listeners.forEach {
|
||||
if (line.contains(it.first)) it.second()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user