complete child side api

This commit is contained in:
TONY_All 2023-03-21 09:42:28 +08:00
parent 32bb9628d3
commit aa4a229b7d
2 changed files with 33 additions and 14 deletions

View File

@ -2,26 +2,46 @@ package cc.maxmc.msm.child.api
import cc.maxmc.msm.api.MultiServerManAPI import cc.maxmc.msm.api.MultiServerManAPI
import cc.maxmc.msm.api.misc.ServerInfo import cc.maxmc.msm.api.misc.ServerInfo
import cc.maxmc.msm.child.netty.NetClient
import cc.maxmc.msm.common.network.packet.PPacketAPICall
import net.md_5.bungee.api.connection.ProxiedPlayer import net.md_5.bungee.api.connection.ProxiedPlayer
import java.util.UUID import java.util.*
import java.util.concurrent.Future import java.util.concurrent.CompletableFuture
import java.util.concurrent.TimeUnit
object APIImpl : MultiServerManAPI { object APIImpl : MultiServerManAPI {
val apiCallCache = HashMap<UUID, Future<Any>>() val apiCallCache = HashMap<UUID, CompletableFuture<out Any>>()
override fun getServer(type: String, players: MutableList<ProxiedPlayer>): ServerInfo { override fun getServer(type: String, players: MutableList<ProxiedPlayer>): ServerInfo {
TODO("Not yet implemented") val packet = PPacketAPICall.PPacketCallGetServer(type, players.map { it.name })
NetClient.sendPacket(packet)
val future = CompletableFuture<ServerInfo>()
apiCallCache[UUID.randomUUID()] = future
return future.get(1, TimeUnit.SECONDS)
} }
override fun informEnd(id: Int) { override fun informEnd(id: Int) {
TODO("Not yet implemented") val packet = PPacketAPICall.PPacketCallInformEnd(id)
NetClient.sendPacket(packet)
val future = CompletableFuture<Unit>()
apiCallCache[UUID.randomUUID()] = future
future.get(1, TimeUnit.SECONDS)
return
} }
override fun getPlayerServer(player: ProxiedPlayer): ServerInfo { override fun getPlayerServer(player: ProxiedPlayer): ServerInfo {
TODO("Not yet implemented") val packet = PPacketAPICall.PPacketCallGetPlayerServer(player.name)
NetClient.sendPacket(packet)
val future = CompletableFuture<ServerInfo>()
apiCallCache[UUID.randomUUID()] = future
return future.get(1, TimeUnit.SECONDS)
} }
override fun containPlayer(player: ProxiedPlayer): Boolean { override fun containPlayer(player: ProxiedPlayer): Boolean {
TODO("Not yet implemented") val packet = PPacketAPICall.PPacketCallContainPlayer(player.name)
NetClient.sendPacket(packet)
val future = CompletableFuture<Boolean>()
apiCallCache[UUID.randomUUID()] = future
return future.get(1, TimeUnit.SECONDS)
} }
} }

View File

@ -1,10 +1,7 @@
package cc.maxmc.msm.common.network.packet package cc.maxmc.msm.common.network.packet
import cc.maxmc.msm.api.misc.EnumAPI import cc.maxmc.msm.api.misc.EnumAPI
import cc.maxmc.msm.api.misc.ServerInfo
import cc.maxmc.msm.common.network.BungeePacket import cc.maxmc.msm.common.network.BungeePacket
import cc.maxmc.msm.common.utils.readServerInfo
import cc.maxmc.msm.common.utils.writeServerInfo
import io.netty.buffer.ByteBuf import io.netty.buffer.ByteBuf
import net.md_5.bungee.protocol.DefinedPacket import net.md_5.bungee.protocol.DefinedPacket
import java.util.* import java.util.*
@ -15,10 +12,12 @@ sealed class PPacketAPICall(
) : BungeePacket() { ) : BungeePacket() {
override fun encode(buf: ByteBuf) { override fun encode(buf: ByteBuf) {
DefinedPacket.writeVarInt(api.ordinal, buf) DefinedPacket.writeVarInt(api.ordinal, buf)
DefinedPacket.writeUUID(uid, buf)
} }
override fun decode(buf: ByteBuf) { override fun decode(buf: ByteBuf) {
api = EnumAPI.values()[buf.readByte().toInt()] api = EnumAPI.values()[buf.readByte().toInt()]
uid = DefinedPacket.readUUID(buf)
} }
class PPacketCallGetServer( class PPacketCallGetServer(
@ -53,16 +52,16 @@ sealed class PPacketAPICall(
} }
class PPacketCallGetPlayerServer( class PPacketCallGetPlayerServer(
var serverInfo: ServerInfo = ServerInfo() var player: String = ""
) : PPacketAPICall() { ) : PPacketAPICall() {
override fun encode(buf: ByteBuf) { override fun encode(buf: ByteBuf) {
super.encode(buf) super.encode(buf)
buf.writeServerInfo(serverInfo) DefinedPacket.writeString(player, buf)
} }
override fun decode(buf: ByteBuf) { override fun decode(buf: ByteBuf) {
super.decode(buf) super.decode(buf)
serverInfo = buf.readServerInfo() player = DefinedPacket.readString(buf)
} }
} }