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 { if status == kraProtocol.StatusGet {
raw = kraProtocol.EncodeJavaMessage(kraProtocol.StatusReply, cmdID, 0, playerUuid, cmdNumber, resArgs) raw = kraProtocol.EncodeJavaMessage(kraProtocol.StatusReply, cmdID, 0, playerUuid, cmdNumber, resArgs)
err = conn.WriteMessage(websocket.BinaryMessage, raw) err = mcClient.SendBinaryMessage(raw)
if err != nil { if err != nil {
logger.Minecraft.Warnln("write:", err) logger.Minecraft.Warnln("write:", err)
} }
} }
} else if dest == kraProtocol.DestVoice || dest == kraProtocol.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) webClient := GetWebClientByUuid(playerUuid)
if destConn != nil { if webClient == nil || dest == kraProtocol.DestVoice && webClient.VoiceConn == nil || dest == kraProtocol.DestMobile && webClient.MobileConn == nil {
raw = kraProtocol.EncodeWebMessage(status, cmdID, cmdNumber, args) raw = kraProtocol.EncodeJavaMessage(kraProtocol.StatusErrTryAgain, cmdID, 0, playerUuid, cmdNumber, args)
err = destConn.WriteMessage(websocket.BinaryMessage, raw) err = mcClient.SendBinaryMessage(raw)
if err != nil { if err != nil {
logger.Minecraft.Warnln("write:", err) logger.Minecraft.Warnln("write:", err)
} }
} else { // conn is not connected return
raw = kraProtocol.EncodeJavaMessage(kraProtocol.StatusErrTryAgain, cmdID, dest, playerUuid, cmdNumber, args)
err = conn.WriteMessage(websocket.BinaryMessage, raw)
if err != nil {
logger.Minecraft.Warnln("write:", err)
} }
if status == kraProtocol.StatusGet {
raw = kraProtocol.EncodeWebMessage(kraProtocol.StatusGet, cmdID, cmdNumber, args)
} else {
raw = kraProtocol.EncodeWebMessage(kraProtocol.StatusSend, cmdID, cmdNumber, args)
}
if dest == kraProtocol.DestVoice {
webClient.SendBinaryMessage(webClient.VoiceConn, raw)
} else {
webClient.SendBinaryMessage(webClient.MobileConn, raw)
} }
} else if dest == kraProtocol.DestProxy { } else if dest == kraProtocol.DestProxy {
client := GetMinecraftClientByName("proxy-1") 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) err = client.SendBinaryMessage(raw)

View File

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