Compare commits

..

4 Commits

Author SHA1 Message Date
Alex 7af4023663 auto restart system 2021-12-27 22:46:38 +01:00
Alex 34f012e999 moved dest into kraProtocol 2021-12-27 22:43:55 +01:00
Alex 6e11457c3d moved dest into kraProtocol 2021-12-27 22:42:50 +01:00
Alex 4e9f367371 old routes no longer supported 2021-12-27 15:34:13 +01:00
7 changed files with 75 additions and 33 deletions

View File

@ -16,6 +16,15 @@ const (
StatusReply = 16 StatusReply = 16
) )
const (
DestBackend = 1
DestVoice = 2
DestMobile = 3
DestProxy = 10
DestPlayersCurrentServer = 11
)
func SendMessageToClient(status int, cmdID int, cmdNumber int, args interface{}) []byte { func SendMessageToClient(status int, cmdID int, cmdNumber int, args interface{}) []byte {
argType := reflect.TypeOf(args).String() argType := reflect.TypeOf(args).String()
var argLen int var argLen int

View File

@ -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)
}

View File

@ -2,6 +2,7 @@ package router
import ( import (
"github.com/gofiber/fiber/v2" "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/mobile"
"krakatoa.net/backend/routers/api/v1/voice" "krakatoa.net/backend/routers/api/v1/voice"
) )
@ -19,14 +20,7 @@ func SetupWebRoutes(app *fiber.App) {
mobileV1.Get("/:mobileWebCode", mobile.GetMobileWebToken) mobileV1.Get("/:mobileWebCode", mobile.GetMobileWebToken)
// old routes minecraftV1 := apiV1.Group("/minecraft")
voiceApiV1 := app.Group("/voice/v1")
voiceApiV1.Get("/:voiceWebCode", voice.GetVoiceWebToken)
mobileApiV1 := app.Group("/mobile/v1")
mobileApiV1.Get("/:mobileWebCode", mobile.GetMobileWebToken)
minecraftV1.Get("/:accessKey/:serverName", minecraft.RestartServer)
} }

View File

@ -22,9 +22,9 @@ func GetMinecraftClientByName(Name string) *structs.MinecraftClient {
} }
func getMinecraftServerNameByDest(dest int) string { func getMinecraftServerNameByDest(dest int) string {
if dest == DestProxy { if dest == kraProtocol.DestProxy {
return "proxy-1" return "proxy-1"
} else { // get players current server from db } else { // get players current server from db if dest is 11
return "lobby-1" return "lobby-1"
} }
} }
@ -33,7 +33,7 @@ func HandleMinecraftMessage(conn *websocket.Conn, status int, cmdID int, dest in
var raw []byte var raw []byte
var err error var err error
if dest == DestBackend { if dest == kraProtocol.DestBackend {
resArgs := minecraftCommandHandler(cmdNumber, playerUuid) resArgs := minecraftCommandHandler(cmdNumber, playerUuid)
if status == kraProtocol.StatusGet { if status == kraProtocol.StatusGet {
@ -45,7 +45,7 @@ func HandleMinecraftMessage(conn *websocket.Conn, status int, cmdID int, dest in
logger.Minecraft.Warnln("write:", err) 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) destConn := getConnForDest(dest, playerUuid)
if destConn != nil { if destConn != nil {
@ -65,6 +65,16 @@ func HandleMinecraftMessage(conn *websocket.Conn, status int, cmdID int, dest in
logger.Minecraft.Warnln("write:", err) 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) { func SendMessageToServer(dest int, playerUuid string, args string) {
mcClient := GetMinecraftClientByName(getMinecraftServerNameByDest(dest)) mcClient := GetMinecraftClientByName(getMinecraftServerNameByDest(dest))
@ -84,3 +95,18 @@ func SendMessageToServer(dest int, playerUuid string, args string) {
mcClient.Connection.WriteMessage(websocket.BinaryMessage, raw) 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)
}
}

View File

@ -2,27 +2,19 @@ package serverCommunication
import ( import (
"github.com/gofiber/websocket/v2" "github.com/gofiber/websocket/v2"
"krakatoa.net/backend/modules/kraProtocol"
"krakatoa.net/backend/modules/logger" "krakatoa.net/backend/modules/logger"
) )
const (
DestBackend = 1
DestVoice = 2
DestMobile = 3
DestProxy = 10
DestPlayersCurrentServer = 11
)
func getConnForDest(dest int, uuid string) *websocket.Conn { func getConnForDest(dest int, uuid string) *websocket.Conn {
switch dest { switch dest {
case DestVoice: case kraProtocol.DestVoice:
return GetWebClientByUuid(uuid).VoiceConn return GetWebClientByUuid(uuid).VoiceConn
case DestMobile: case kraProtocol.DestMobile:
return GetWebClientByUuid(uuid).MobileConn return GetWebClientByUuid(uuid).MobileConn
case DestProxy: case kraProtocol.DestProxy:
return GetMinecraftClientByName("proxy-1").Connection return GetMinecraftClientByName("proxy-1").Connection
case DestPlayersCurrentServer: case kraProtocol.DestPlayersCurrentServer:
return GetMinecraftClientByName("lobby-1").Connection return GetMinecraftClientByName("lobby-1").Connection
default: default:
logger.Web.Println("conn for dest is nil") logger.Web.Println("conn for dest is nil")

View File

@ -69,7 +69,7 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status in
} }
} }
if dest == DestProxy || dest == DestPlayersCurrentServer { // forwarding message to java / minecraft if dest == kraProtocol.DestProxy || dest == kraProtocol.DestPlayersCurrentServer { // forwarding message to java / minecraft
connForDest := getConnForDest(dest, uuid) connForDest := getConnForDest(dest, uuid)
raw = kraProtocol.SendMessageToJava(status, cmdID, dest, uuid, cmdNumber, args) raw = kraProtocol.SendMessageToJava(status, cmdID, dest, uuid, cmdNumber, args)
@ -81,7 +81,7 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status in
} }
} else { // web } else { // web
if isVoice { // message from voice if isVoice { // message from voice
if dest == DestMobile { // forwarding message to mobile if dest == kraProtocol.DestMobile { // forwarding message to mobile
connForDest := getConnForDest(dest, uuid) // get conn for mobile connForDest := getConnForDest(dest, uuid) // get conn for mobile
if connForDest != nil { // mobile is connected if connForDest != nil { // mobile is connected
@ -101,7 +101,7 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status in
logger.WebVoice.Warnln("write:", err) logger.WebVoice.Warnln("write:", err)
} }
} }
} else if dest == DestBackend { } else if dest == kraProtocol.DestBackend {
resArgs := voiceCommandHandler(cmdNumber, uuid) resArgs := voiceCommandHandler(cmdNumber, uuid)
if status == kraProtocol.StatusGet { if status == kraProtocol.StatusGet {
@ -116,7 +116,7 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status in
} }
} }
} else { // message from mobile } else { // message from mobile
if dest == DestVoice { // forwarding message to voice if dest == kraProtocol.DestVoice { // forwarding message to voice
connForDest := getConnForDest(dest, uuid) // get conn for voice connForDest := getConnForDest(dest, uuid) // get conn for voice
if connForDest != nil { // voice connected if connForDest != nil { // voice connected
@ -136,7 +136,7 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status in
logger.WebMobile.Warnln("write:", err) logger.WebMobile.Warnln("write:", err)
} }
} }
} else if dest == DestBackend { } else if dest == kraProtocol.DestBackend {
resArgs := mobileCommandHandler(cmdNumber) resArgs := mobileCommandHandler(cmdNumber)
if status == kraProtocol.StatusGet { if status == kraProtocol.StatusGet {

View File

@ -69,13 +69,13 @@ func RunHub() {
client.MobileCmdIDs = []int{} client.MobileCmdIDs = []int{}
logger.Web.Println("delete mobileConn", client) logger.Web.Println("delete mobileConn", client)
serverCommunication.SendMessageToServer(serverCommunication.DestProxy, uuid, "1") serverCommunication.SendMessageToServer(kraProtocol.DestProxy, uuid, "1")
} else if client.VoiceConn == connection { } else if client.VoiceConn == connection {
client.VoiceConn = nil client.VoiceConn = nil
client.VoiceCmdIDs = []int{} client.VoiceCmdIDs = []int{}
logger.Web.Println("delete voiceConn", client) logger.Web.Println("delete voiceConn", client)
serverCommunication.SendMessageToServer(serverCommunication.DestProxy, uuid, "2") serverCommunication.SendMessageToServer(kraProtocol.DestProxy, uuid, "2")
} }
logger.Web.Println("client after updating", client) logger.Web.Println("client after updating", client)