reply handling

master
Alex 2021-12-29 15:37:04 +01:00
parent 3924482dd4
commit 91f160496b
3 changed files with 42 additions and 40 deletions

View File

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

View File

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

View File

@ -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 {