diff --git a/routers/api/v1/minecraft/minecraft.go b/routers/api/v1/minecraft/minecraft.go new file mode 100644 index 0000000..1a92d2b --- /dev/null +++ b/routers/api/v1/minecraft/minecraft.go @@ -0,0 +1,21 @@ +package minecraft + +import ( + "github.com/gofiber/fiber/v2" + "krakatoa.net/backend/modules/configs/serverConfig" + "krakatoa.net/backend/modules/kraProtocol" + "krakatoa.net/backend/modules/logger" + "krakatoa.net/backend/serverCommunication" +) + +func RestartServer(c *fiber.Ctx) error { + if c.Params("accessKey") == serverConfig.Cfg.Servers.MinecraftServer.AccessKey { + logger.Minecraft.Infoln("RestartServer msg", c.Params("serverName"), c.Hostname(), c.IP()) + + serverCommunication.SendMessageToMinecraftServer(kraProtocol.StatusSend, kraProtocol.DestProxy, "", 33329, c.Params("serverName")) + + return c.SendStatus(fiber.StatusOK) + } + + return c.SendStatus(fiber.StatusUnauthorized) +} diff --git a/routers/router/router.go b/routers/router/router.go index 7d98296..41ed839 100644 --- a/routers/router/router.go +++ b/routers/router/router.go @@ -2,6 +2,7 @@ package router import ( "github.com/gofiber/fiber/v2" + "krakatoa.net/backend/routers/api/v1/minecraft" "krakatoa.net/backend/routers/api/v1/mobile" "krakatoa.net/backend/routers/api/v1/voice" ) @@ -19,4 +20,7 @@ func SetupWebRoutes(app *fiber.App) { mobileV1.Get("/:mobileWebCode", mobile.GetMobileWebToken) + minecraftV1 := apiV1.Group("/minecraft") + + minecraftV1.Get("/:accessKey/:serverName", minecraft.RestartServer) } diff --git a/serverCommunication/minecraft.go b/serverCommunication/minecraft.go index 041e27b..7391664 100644 --- a/serverCommunication/minecraft.go +++ b/serverCommunication/minecraft.go @@ -22,9 +22,9 @@ func GetMinecraftClientByName(Name string) *structs.MinecraftClient { } func getMinecraftServerNameByDest(dest int) string { - if dest == DestProxy { + if dest == kraProtocol.DestProxy { return "proxy-1" - } else { // get players current server from db + } else { // get players current server from db if dest is 11 return "lobby-1" } } @@ -33,7 +33,7 @@ func HandleMinecraftMessage(conn *websocket.Conn, status int, cmdID int, dest in var raw []byte var err error - if dest == DestBackend { + if dest == kraProtocol.DestBackend { resArgs := minecraftCommandHandler(cmdNumber, playerUuid) if status == kraProtocol.StatusGet { @@ -45,7 +45,7 @@ func HandleMinecraftMessage(conn *websocket.Conn, status int, cmdID int, dest in logger.Minecraft.Warnln("write:", err) } } - } else if dest == DestVoice || dest == DestMobile { // forwarding messsage to voice or mobile + } else if dest == kraProtocol.DestVoice || dest == kraProtocol.DestMobile { // forwarding messsage to voice or mobile destConn := getConnForDest(dest, playerUuid) if destConn != nil { @@ -65,6 +65,16 @@ func HandleMinecraftMessage(conn *websocket.Conn, status int, cmdID int, dest in logger.Minecraft.Warnln("write:", err) } } + } else if dest == kraProtocol.DestProxy { + client := GetMinecraftClientByName("proxy-1") + + raw := kraProtocol.SendMessageToJava(status, cmdID, dest, playerUuid, cmdNumber, args) + + err = client.Connection.WriteMessage(websocket.BinaryMessage, raw) + + if err != nil { + logger.Minecraft.Warnln("write:", err) + } } } @@ -77,6 +87,7 @@ func minecraftCommandHandler(cmdNumber int, playerUuid string) (args string) { } } +// Deprecated: only for testing, use SendMessageToMinecraftServer instead func SendMessageToServer(dest int, playerUuid string, args string) { mcClient := GetMinecraftClientByName(getMinecraftServerNameByDest(dest)) @@ -84,3 +95,18 @@ func SendMessageToServer(dest int, playerUuid string, args string) { mcClient.Connection.WriteMessage(websocket.BinaryMessage, raw) } + +func SendMessageToMinecraftServer(status int, dest int, playerUuid string, cmdNumber int, args string) { + cmdID := 0 + raw := kraProtocol.SendMessageToJava(status, cmdID, dest, playerUuid, cmdNumber, args) + + serverName := getMinecraftServerNameByDest(dest) + + mcClient := GetMinecraftClientByName(serverName) + + err := mcClient.Connection.WriteMessage(websocket.BinaryMessage, raw) + + if err != nil { + logger.Minecraft.Warnln("err", err) + } +}