minecraft ack handling

master
Alex 2021-12-29 14:15:22 +01:00
parent a90e1245d1
commit 2c8f5aa56b
2 changed files with 40 additions and 24 deletions

View File

@ -80,36 +80,56 @@ func HandleMinecraftMessage(conn *websocket.Conn, status int, cmdID int, dest in
if status == kraProtocol.StatusGet {
raw = kraProtocol.EncodeJavaMessage(kraProtocol.StatusReply, cmdID, 0, playerUuid, cmdNumber, resArgs)
err = conn.WriteMessage(websocket.BinaryMessage, raw)
err = mcClient.SendBinaryMessage(raw)
if err != nil {
logger.Minecraft.Warnln("write:", err)
}
}
} else if dest == kraProtocol.DestVoice || dest == kraProtocol.DestMobile { // forwarding messsage to voice or mobile
destConn := getConnForDest(dest, playerUuid)
webClient := GetWebClientByUuid(playerUuid)
if destConn != nil {
raw = kraProtocol.EncodeWebMessage(status, cmdID, cmdNumber, args)
if webClient == nil || dest == kraProtocol.DestVoice && webClient.VoiceConn == nil || dest == kraProtocol.DestMobile && webClient.MobileConn == nil {
raw = kraProtocol.EncodeJavaMessage(kraProtocol.StatusErrTryAgain, cmdID, 0, playerUuid, cmdNumber, args)
err = destConn.WriteMessage(websocket.BinaryMessage, raw)
err = mcClient.SendBinaryMessage(raw)
if err != nil {
logger.Minecraft.Warnln("write:", err)
}
} else { // conn is not connected
raw = kraProtocol.EncodeJavaMessage(kraProtocol.StatusErrTryAgain, cmdID, dest, playerUuid, cmdNumber, args)
return
}
err = conn.WriteMessage(websocket.BinaryMessage, raw)
if status == kraProtocol.StatusGet {
raw = kraProtocol.EncodeWebMessage(kraProtocol.StatusGet, cmdID, cmdNumber, args)
} else {
raw = kraProtocol.EncodeWebMessage(kraProtocol.StatusSend, cmdID, cmdNumber, args)
}
if err != nil {
logger.Minecraft.Warnln("write:", err)
}
if dest == kraProtocol.DestVoice {
webClient.SendBinaryMessage(webClient.VoiceConn, raw)
} else {
webClient.SendBinaryMessage(webClient.MobileConn, raw)
}
} else if dest == kraProtocol.DestProxy {
client := GetMinecraftClientByName("proxy-1")
raw := kraProtocol.EncodeJavaMessage(status, cmdID, dest, playerUuid, cmdNumber, args)
if client == nil {
raw = kraProtocol.EncodeJavaMessage(kraProtocol.StatusErrTryAgain, cmdID, 0, playerUuid, cmdNumber, "")
err = mcClient.SendBinaryMessage(raw)
if err != nil {
logger.Minecraft.Warnln("write:", err)
}
return
}
if status == kraProtocol.StatusGet {
raw = kraProtocol.EncodeJavaMessage(kraProtocol.StatusGet, cmdID, dest, playerUuid, cmdNumber, args)
} else {
raw = kraProtocol.EncodeJavaMessage(kraProtocol.StatusSend, cmdID, dest, playerUuid, cmdNumber, args)
}
err = client.SendBinaryMessage(raw)

View File

@ -1,23 +1,19 @@
package serverCommunication
import (
"github.com/gofiber/websocket/v2"
"krakatoa.net/backend/modules/kraProtocol"
"krakatoa.net/backend/modules/logger"
)
func getConnForDest(dest int, uuid string) *websocket.Conn {
/*
func getClientByDest(dest int, uuid string) (*structs.WebClient, *structs.MinecraftClient) {
switch dest {
case kraProtocol.DestVoice:
return GetWebClientByUuid(uuid).VoiceConn
return GetWebClientByUuid(uuid), nil
case kraProtocol.DestMobile:
return GetWebClientByUuid(uuid).MobileConn
return GetWebClientByUuid(uuid), nil
case kraProtocol.DestProxy:
return GetMinecraftClientByName("proxy-1").Conn
return nil, GetMinecraftClientByName("proxy-1")
case kraProtocol.DestPlayersCurrentServer:
return GetMinecraftClientByName("lobby-1").Conn
return nil, GetMinecraftClientByName("lobby-1")
default:
logger.Web.Println("conn for dest is nil")
return nil
return nil, nil
}
}
*/