origin dest added to reply the sender after successful reply of the target dest

master
Alex 2022-02-12 21:08:11 +01:00
parent 0731f40933
commit 7f2ee4c860
3 changed files with 35 additions and 0 deletions

View File

@ -1,6 +1,7 @@
package structs
import (
"errors"
"sync"
"time"
@ -64,6 +65,15 @@ func (mcClient *MinecraftClient) IsCmdIDInSendMessagesQueue(cmdID int) bool {
return false
}
func (mcClient *MinecraftClient) GetMessageFromSendQueueByCmdID(cmdID int) (queueMsg SendQueueMessage, err error) {
for _, queueMsg := range mcClient.SendQueueMessages {
if cmdID == queueMsg.CmdID {
return *queueMsg, nil
}
}
return SendQueueMessage{}, errors.New("message from send queue by cmdID not found")
}
func (mcClient *MinecraftClient) RemoveMessageFromSendQueueByCmdID(cmdID int) {
mcClient.sendQueueMessagesMu.Lock()
defer mcClient.sendQueueMessagesMu.Unlock()

View File

@ -7,5 +7,6 @@ type SendQueueMessage struct {
CmdID int
TrySendCount int
OriginDest int // This value tells from which destination this message was sent. (example: voice, mobile, backend)
OriginCmdID int
Time time.Time
}

View File

@ -29,6 +29,30 @@ func HandleMinecraftMessage(conn *websocket.Conn, msg []byte) {
logger.Minecraft.Debugln(mcClient.IsCmdIDInSendMessagesQueue(cmdID))
if mcClient.IsCmdIDInSendMessagesQueue(cmdID) {
queueMsg, err := mcClient.GetMessageFromSendQueueByCmdID(cmdID)
if err != nil {
return
}
if queueMsg.OriginDest == kraProtocol.DestVoice || queueMsg.OriginDest == kraProtocol.DestMobile {
webClient := GetWebClientByUuid(playerUuid)
raw := kraProtocol.EncodeWebMessage(kraProtocol.StatusReply, queueMsg.OriginCmdID, cmdNumber, args)
var err error
if queueMsg.OriginDest == kraProtocol.DestVoice {
err = webClient.SendBinaryMessage(webClient.VoiceConn, raw)
} else {
err = webClient.SendBinaryMessage(webClient.MobileConn, raw)
}
if err != nil {
logger.Minecraft.Println("failed to send message")
}
}
mcClient.RemoveMessageFromSendQueueByCmdID(cmdID)
// TODO: handle ack answer (send answer to mobile or handle her)