From c23a6dcdabd1fa0d20904538a7ff14c9c7ab5c5a Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 1 Mar 2022 19:36:28 +0100 Subject: [PATCH] added ack handling for voice and mobile send queue messages --- serverCommunication/serverCommunication.go | 55 +++++++++++++++------- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/serverCommunication/serverCommunication.go b/serverCommunication/serverCommunication.go index c95531d..3788e1d 100644 --- a/serverCommunication/serverCommunication.go +++ b/serverCommunication/serverCommunication.go @@ -6,6 +6,7 @@ import ( "krakatoa.net/backend/modules/cache" "krakatoa.net/backend/modules/configs/kraSettingsConfig" "krakatoa.net/backend/modules/logger" + "krakatoa.net/backend/modules/structs" ) /* @@ -32,27 +33,47 @@ func AckHandler() { for _ = range ticker.C { currentTime := time.Now() - /*for uuid, webClient := range cache.WebClients { - logger.Web.Println("ackHandler web client", uuid, webClient.SendVoiceQueueMessages, webClient.SendMobileQueueMessages) + for _, webClient := range cache.WebClients { + for _, msg := range webClient.SendVoiceQueueMessages { + handleSendQueueMessage(currentTime, webClient, true, nil, msg) + } - } */ + for _, msg := range webClient.SendMobileQueueMessages { + handleSendQueueMessage(currentTime, webClient, false, nil, msg) + } + } for _, mcClient := range cache.MinecraftClients { for _, msg := range mcClient.SendQueueMessages { - if int(currentTime.UnixMilli())-int(msg.Time.UnixMilli()) > kraSettingsConfig.Cfg.WebSocket.AckTimeouts[msg.TrySendCount] { - logger.Minecraft.Println("here") - msg.Time = currentTime - - err := mcClient.SendBinaryMessage(msg.MessageRaw) - - if err != nil { - logger.Minecraft.Println("ackHandler err sending msg", err) - } - - if msg.TrySendCount < 4 { - msg.TrySendCount++ - } - } + handleSendQueueMessage(currentTime, nil, false, mcClient, msg) + } + } + } +} + +func handleSendQueueMessage(currentTime time.Time, webClient *structs.WebClient, isVoice bool, mcClient *structs.MinecraftClient, msg *structs.SendQueueMessage) { + if int(currentTime.UnixMilli())-int(msg.Time.UnixMilli()) > kraSettingsConfig.Cfg.WebSocket.AckTimeouts[msg.TrySendCount] { + var err error + + if webClient != nil && mcClient != nil { + msg.Time = currentTime + + if webClient != nil { + if isVoice { + err = webClient.SendBinaryMessage(webClient.VoiceConn, msg.MessageRaw) + } else { + err = webClient.SendBinaryMessage(webClient.MobileConn, msg.MessageRaw) + } + } else { + err = mcClient.SendBinaryMessage(msg.MessageRaw) + } + + if err != nil { + logger.Web.Println("ackHandler err sending msg", err) + } + + if msg.TrySendCount < 4 { + msg.TrySendCount++ } } }