origin dest added to reply the sender after successful reply of the target dest
parent
0731f40933
commit
7f2ee4c860
|
@ -1,6 +1,7 @@
|
||||||
package structs
|
package structs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -64,6 +65,15 @@ func (mcClient *MinecraftClient) IsCmdIDInSendMessagesQueue(cmdID int) bool {
|
||||||
return false
|
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) {
|
func (mcClient *MinecraftClient) RemoveMessageFromSendQueueByCmdID(cmdID int) {
|
||||||
mcClient.sendQueueMessagesMu.Lock()
|
mcClient.sendQueueMessagesMu.Lock()
|
||||||
defer mcClient.sendQueueMessagesMu.Unlock()
|
defer mcClient.sendQueueMessagesMu.Unlock()
|
||||||
|
|
|
@ -7,5 +7,6 @@ type SendQueueMessage struct {
|
||||||
CmdID int
|
CmdID int
|
||||||
TrySendCount int
|
TrySendCount int
|
||||||
OriginDest int // This value tells from which destination this message was sent. (example: voice, mobile, backend)
|
OriginDest int // This value tells from which destination this message was sent. (example: voice, mobile, backend)
|
||||||
|
OriginCmdID int
|
||||||
Time time.Time
|
Time time.Time
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,30 @@ func HandleMinecraftMessage(conn *websocket.Conn, msg []byte) {
|
||||||
logger.Minecraft.Debugln(mcClient.IsCmdIDInSendMessagesQueue(cmdID))
|
logger.Minecraft.Debugln(mcClient.IsCmdIDInSendMessagesQueue(cmdID))
|
||||||
|
|
||||||
if 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)
|
mcClient.RemoveMessageFromSendQueueByCmdID(cmdID)
|
||||||
|
|
||||||
// TODO: handle ack answer (send answer to mobile or handle her)
|
// TODO: handle ack answer (send answer to mobile or handle her)
|
||||||
|
|
Loading…
Reference in New Issue