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" "krakatoa.net/backend/modules/structs"
) )
func GetMinecraftClientByName(Name string) *structs.MinecraftClient { func HandleMinecraftMessage(conn *websocket.Conn, msg []byte) {
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) {
var raw []byte var raw []byte
var err error var err error
status, cmdID, dest, playerUuid, cmdNumber, args := kraProtocol.DecodeJavaMessage(msg)
mcClient := GetMinecraftClientByConn(conn) mcClient := GetMinecraftClientByConn(conn)
if mcClient == nil { 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 status == kraProtocol.StatusReply {
if isCmdIDInList(mcClient.CmdIDs, cmdID) {
if err != nil { mcClient.RemoveCmdID(cmdID)
logger.Minecraft.Warnln("write err:", err)
} }
return 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) { func minecraftCommandHandler(cmdNumber int, playerUuid string) (args string) {
switch cmdNumber { switch cmdNumber {
case 10: // testing case 10: // testing

View File

@ -24,6 +24,7 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, msg []byt
if webClient == nil { if webClient == nil {
// TODO: when does this apply? Send error with conn? // TODO: when does this apply? Send error with conn?
logger.Web.Debugln("webClient is nil")
return return
} }

View File

@ -3,7 +3,6 @@ package minecraft
import ( import (
"github.com/gofiber/websocket/v2" "github.com/gofiber/websocket/v2"
"krakatoa.net/backend/modules/cache" "krakatoa.net/backend/modules/cache"
"krakatoa.net/backend/modules/kraProtocol"
"krakatoa.net/backend/modules/logger" "krakatoa.net/backend/modules/logger"
"krakatoa.net/backend/modules/structs" "krakatoa.net/backend/modules/structs"
serverCommunication "krakatoa.net/backend/serverCommunication" serverCommunication "krakatoa.net/backend/serverCommunication"
@ -26,9 +25,7 @@ func RunHub() {
case data := <-broadcast: case data := <-broadcast:
logger.Minecraft.Debugln("message received", data.Msg) logger.Minecraft.Debugln("message received", data.Msg)
status, cmdID, dest, playerUuid, cmdNumber, args := kraProtocol.DecodeJavaMessage(data.Msg) go serverCommunication.HandleMinecraftMessage(data.Conn, data.Msg)
serverCommunication.HandleMinecraftMessage(data.Conn, status, cmdID, dest, playerUuid, cmdNumber, args)
case connection := <-unregister: case connection := <-unregister:
for servername, client := range cache.MinecraftClients { for servername, client := range cache.MinecraftClients {