package serverCommunication import ( "time" "krakatoa.net/backend/modules/cache" "krakatoa.net/backend/modules/configs/kraSettingsConfig" "krakatoa.net/backend/modules/logger" "krakatoa.net/backend/modules/structs" ) /* func getClientByDest(dest int, uuid string) (*structs.WebClient, *structs.MinecraftClient) { switch dest { case kraProtocol.DestVoice: return GetWebClientByUuid(uuid), nil case kraProtocol.DestMobile: return GetWebClientByUuid(uuid), nil case kraProtocol.DestProxy: return nil, GetMinecraftClientByName("proxy-1") case kraProtocol.DestPlayersCurrentServer: return nil, GetMinecraftClientByName("lobby-1") default: logger.Web.Println("conn for dest is nil") return nil, nil } } */ func AckHandler() { ticker := time.NewTicker(3 * time.Second) // 20 * time.Millisecond for _ = range ticker.C { currentTime := time.Now() logger.Web.Debugln("ack handler running") for _, webClient := range cache.WebClients { for _, msg := range webClient.SendVoiceQueueMessages { logger.Web.Debugln("ackHandler voice:", webClient.SendVoiceQueueMessages) handleSendQueueMessage(currentTime, webClient, true, nil, msg) } for _, msg := range webClient.SendMobileQueueMessages { logger.Web.Debugln("ackHandler mobile:", webClient.SendMobileQueueMessages) handleSendQueueMessage(currentTime, webClient, false, nil, msg) } } for _, mcClient := range cache.MinecraftClients { for _, msg := range mcClient.SendQueueMessages { logger.Web.Debugln("ackHandler mcClient:", mcClient.SendQueueMessages) 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++ } } } }