origin dest added to reply the sender after successful reply of the target dest
parent
0731f40933
commit
7f2ee4c860
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue