diff --git a/serverCommunication/minecraft.go b/serverCommunication/minecraft.go index d61ff6d..2b846c5 100644 --- a/serverCommunication/minecraft.go +++ b/serverCommunication/minecraft.go @@ -10,49 +10,23 @@ import ( "krakatoa.net/backend/modules/structs" ) -func GetMinecraftClientByName(Name string) *structs.MinecraftClient { - for name, client := range cache.MinecraftClients { - if name == Name { - logger.Minecraft.Debugln("return mc client", client.Name) - return client - } - } - - logger.Minecraft.Warnln("mc client nil") - - return nil -} - -func GetMinecraftClientByConn(conn *websocket.Conn) *structs.MinecraftClient { - for _, client := range cache.MinecraftClients { - if client.Conn == conn { - return client - } - } - return nil -} - -func getMinecraftServerNameByDest(dest int) string { - if dest == kraProtocol.DestProxy { - return "proxy-1" - } else { // get players current server from db if dest is 11 - return "lobby-1" - } -} - -func HandleMinecraftMessage(conn *websocket.Conn, status int, cmdID int, dest int, playerUuid string, cmdNumber int, args string) { +func HandleMinecraftMessage(conn *websocket.Conn, msg []byte) { var raw []byte var err error + status, cmdID, dest, playerUuid, cmdNumber, args := kraProtocol.DecodeJavaMessage(msg) + mcClient := GetMinecraftClientByConn(conn) if mcClient == nil { - raw := kraProtocol.EncodeJavaMessage(kraProtocol.StatusErrTryAgain, cmdID, 0, playerUuid, cmdNumber, "") + // TODO: when does this apply? Send error with conn? + logger.Minecraft.Warnln("mcClient is nil") + return + } - err = conn.WriteMessage(websocket.BinaryMessage, raw) - - if err != nil { - logger.Minecraft.Warnln("write err:", err) + if status == kraProtocol.StatusReply { + if isCmdIDInList(mcClient.CmdIDs, cmdID) { + mcClient.RemoveCmdID(cmdID) } return } @@ -141,6 +115,36 @@ func HandleMinecraftMessage(conn *websocket.Conn, status int, cmdID int, dest in } } +func GetMinecraftClientByName(Name string) *structs.MinecraftClient { + for name, client := range cache.MinecraftClients { + if name == Name { + logger.Minecraft.Debugln("return mc client", client.Name) + return client + } + } + + logger.Minecraft.Warnln("mc client nil") + + return nil +} + +func GetMinecraftClientByConn(conn *websocket.Conn) *structs.MinecraftClient { + for _, client := range cache.MinecraftClients { + if client.Conn == conn { + return client + } + } + return nil +} + +func getMinecraftServerNameByDest(dest int) string { + if dest == kraProtocol.DestProxy { + return "proxy-1" + } else { // get players current server from db if dest is 11 + return "lobby-1" + } +} + func minecraftCommandHandler(cmdNumber int, playerUuid string) (args string) { switch cmdNumber { case 10: // testing diff --git a/serverCommunication/web.go b/serverCommunication/web.go index c5ba070..2d1f569 100644 --- a/serverCommunication/web.go +++ b/serverCommunication/web.go @@ -24,6 +24,7 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, msg []byt if webClient == nil { // TODO: when does this apply? Send error with conn? + logger.Web.Debugln("webClient is nil") return } diff --git a/servers/minecraft/socketHub.go b/servers/minecraft/socketHub.go index 179b4b7..2af0f28 100644 --- a/servers/minecraft/socketHub.go +++ b/servers/minecraft/socketHub.go @@ -3,7 +3,6 @@ package minecraft import ( "github.com/gofiber/websocket/v2" "krakatoa.net/backend/modules/cache" - "krakatoa.net/backend/modules/kraProtocol" "krakatoa.net/backend/modules/logger" "krakatoa.net/backend/modules/structs" serverCommunication "krakatoa.net/backend/serverCommunication" @@ -26,9 +25,7 @@ func RunHub() { case data := <-broadcast: logger.Minecraft.Debugln("message received", data.Msg) - status, cmdID, dest, playerUuid, cmdNumber, args := kraProtocol.DecodeJavaMessage(data.Msg) - - serverCommunication.HandleMinecraftMessage(data.Conn, status, cmdID, dest, playerUuid, cmdNumber, args) + go serverCommunication.HandleMinecraftMessage(data.Conn, data.Msg) case connection := <-unregister: for servername, client := range cache.MinecraftClients {