send message to mc server

master
Alex 2021-12-28 21:57:57 +01:00
parent 9ff320034f
commit 4af290fcf7
1 changed files with 57 additions and 59 deletions

View File

@ -19,73 +19,71 @@ import (
func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status int, cmdID int, dest int, cmdNumber int, args string) {
var err error
var raw []byte
var client *structs.WebClient
// TODO: handle other dests
webClient := getWebClientByConn(conn)
if webClient == nil {
// TODO: when does this apply? Send error with conn?
return
}
if status == kraProtocol.StatusGet {
client = getWebClientByConn(conn)
var cmdIDInList bool
if client == nil {
raw = kraProtocol.EncodeWebMessage(kraProtocol.StatusErrTryAgain, cmdID, cmdNumber, "")
logger.Web.Println("cmdID", isVoice, webClient.VoiceCmdIDs, webClient.MobileCmdIDs)
err = client.SendBinaryMessage(conn, raw)
if isVoice {
cmdIDInList = isCmdIDInList(webClient.VoiceCmdIDs, cmdID)
} else {
cmdIDInList = isCmdIDInList(webClient.MobileCmdIDs, cmdID)
}
if cmdIDInList { // cmdID already in queue
raw = kraProtocol.EncodeWebMessage(kraProtocol.StatusMessageAlreadyInQueue, cmdID, cmdNumber, "")
err = webClient.SendBinaryMessage(conn, raw)
if err != nil {
logger.Web.Warnln("write:", err)
logger.WebVoice.Warnln("write:", err)
}
return
}
// add cmdID to list
if isVoice {
logger.Web.Debugln("voiceCmdIDs", webClient.VoiceCmdIDs)
webClient.VoiceCmdIDs = append(webClient.VoiceCmdIDs, cmdID)
logger.Web.Debugln("after voiceCmdIDs", webClient.VoiceCmdIDs)
} else {
var cmdIDInList bool
logger.Web.Println("cmdID", isVoice, client.VoiceCmdIDs, client.MobileCmdIDs)
if isVoice {
cmdIDInList = isCmdIDInList(client.VoiceCmdIDs, cmdID)
} else {
cmdIDInList = isCmdIDInList(client.MobileCmdIDs, cmdID)
}
if cmdIDInList { // cmdID already in queue
raw = kraProtocol.EncodeWebMessage(kraProtocol.StatusMessageAlreadyInQueue, cmdID, cmdNumber, "")
err = client.SendBinaryMessage(conn, raw)
if err != nil {
logger.WebVoice.Warnln("write:", err)
}
return
}
// add cmdID to list
if isVoice {
logger.Web.Debugln("voiceCmdIDs", client.VoiceCmdIDs)
client.VoiceCmdIDs = append(client.VoiceCmdIDs, cmdID)
logger.Web.Debugln("after voiceCmdIDs", client.VoiceCmdIDs)
} else {
logger.Web.Debugln("MobileCmdIDs", client.MobileCmdIDs)
client.MobileCmdIDs = append(client.MobileCmdIDs, cmdID)
logger.Web.Debugln("after MobileCmdIDs", client.MobileCmdIDs)
}
logger.Web.Debugln("MobileCmdIDs", webClient.MobileCmdIDs)
webClient.MobileCmdIDs = append(webClient.MobileCmdIDs, cmdID)
logger.Web.Debugln("after MobileCmdIDs", webClient.MobileCmdIDs)
}
}
logger.Minecraft.Debugln("dest", dest, dest == kraProtocol.DestProxy)
if dest == kraProtocol.DestProxy || dest == kraProtocol.DestPlayersCurrentServer { // forwarding message to java / minecraft
connForDest := getConnForDest(dest, uuid)
logger.Minecraft.Debugln("forwarding...")
logger.Minecraft.Debugln("forwarding", client)
logger.Minecraft.Debugln("forwarding", connForDest)
raw = kraProtocol.EncodeJavaMessage(status, cmdID, dest, uuid, cmdNumber, args)
err = client.SendBinaryMessage(connForDest, raw)
err = SendMessageToMinecraftServer(status, dest, uuid, cmdNumber, args)
if err != nil {
logger.Web.Warnln("write:", err)
raw := kraProtocol.EncodeWebMessage(kraProtocol.StatusErrTryAgain, cmdID, cmdNumber, args)
webClient.SendBinaryMessage(conn, raw)
return
}
/*
connForDest := getConnForDest(dest, uuid)
raw = kraProtocol.EncodeJavaMessage(status, cmdID, dest, uuid, cmdNumber, args)
err = client.SendBinaryMessage(connForDest, raw)
if err != nil {
logger.Web.Warnln("write:", err)
} */
} else { // web
if isVoice { // message from voice
if dest == kraProtocol.DestMobile { // forwarding message to mobile
@ -94,7 +92,7 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status in
if connForDest != nil { // mobile is connected
raw = kraProtocol.EncodeWebMessage(kraProtocol.StatusReply, cmdID, cmdNumber, args)
err = client.SendBinaryMessage(connForDest, raw)
err = webClient.SendBinaryMessage(connForDest, raw)
if err != nil {
logger.WebVoice.Warnln("write:", err)
@ -102,7 +100,7 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status in
} else { // mobile not connected
raw = kraProtocol.EncodeWebMessage(kraProtocol.StatusSend, 58299, cmdNumber, "")
err = client.SendBinaryMessage(conn, raw)
err = webClient.SendBinaryMessage(conn, raw)
if err != nil {
logger.WebVoice.Warnln("write:", err)
@ -115,7 +113,7 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status in
logger.Web.Debugln("status get reply")
raw = kraProtocol.EncodeWebMessage(kraProtocol.StatusReply, cmdID, cmdNumber, resArgs)
err = client.SendBinaryMessage(conn, raw)
err = webClient.SendBinaryMessage(conn, raw)
if err != nil {
logger.WebVoice.Warnln("write:", err)
@ -129,7 +127,7 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status in
if connForDest != nil { // voice connected
raw = kraProtocol.EncodeWebMessage(kraProtocol.StatusSend, cmdID, cmdNumber, args)
err = client.SendBinaryMessage(connForDest, raw)
err = webClient.SendBinaryMessage(connForDest, raw)
if err != nil {
logger.WebMobile.Warnln("write:", err)
@ -137,7 +135,7 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status in
} else { // voice not connected
raw = kraProtocol.EncodeWebMessage(kraProtocol.StatusSend, 5456, cmdNumber, "")
err = client.SendBinaryMessage(conn, raw)
err = webClient.SendBinaryMessage(conn, raw)
if err != nil {
logger.WebMobile.Warnln("write:", err)
@ -149,7 +147,7 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status in
if status == kraProtocol.StatusGet {
raw = kraProtocol.EncodeWebMessage(kraProtocol.StatusReply, cmdID, cmdNumber, resArgs)
err = client.SendBinaryMessage(conn, raw)
err = webClient.SendBinaryMessage(conn, raw)
if err != nil {
logger.WebVoice.Warnln("write:", err)
@ -158,7 +156,7 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status in
} else { // err dest unknown
raw = kraProtocol.EncodeWebMessage(kraProtocol.StatusErrTryAgain, cmdID, cmdNumber, "")
err = client.SendBinaryMessage(conn, raw)
err = webClient.SendBinaryMessage(conn, raw)
if err != nil {
logger.WebMobile.Warnln("write:", err)
@ -167,11 +165,11 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status in
}
}
if client != nil { // remove cmdID from list
if webClient != nil { // remove cmdID from list
if isVoice {
client.RemoveVoiceCmdID(cmdID)
webClient.RemoveVoiceCmdID(cmdID)
} else {
client.RemoveMobileCmdID(cmdID)
webClient.RemoveMobileCmdID(cmdID)
}
/*var newArr []int