diff --git a/serverCommunication/minecraft.go b/serverCommunication/minecraft.go index b21c289..d61ff6d 100644 --- a/serverCommunication/minecraft.go +++ b/serverCommunication/minecraft.go @@ -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) diff --git a/serverCommunication/serverCommunication.go b/serverCommunication/serverCommunication.go index a5c7057..a0bcafc 100644 --- a/serverCommunication/serverCommunication.go +++ b/serverCommunication/serverCommunication.go @@ -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 } } +*/