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(5 * time.Second) // 20 * time.Millisecond for _ = range ticker.C { currentTime := time.Now() for _, webClient := range cache.WebClients { if len(webClient.SendVoiceQueueMessages) > 0 { logger.Web.Debugln("ackHandler voice:", webClient.SendVoiceQueueMessages) } for _, msg := range webClient.SendVoiceQueueMessages { handleSendQueueMessage(currentTime, webClient, true, nil, msg) } if len(webClient.SendMobileQueueMessages) > 0 { logger.Web.Debugln("ackHandler mobile:", webClient.SendMobileQueueMessages) } for _, msg := range webClient.SendMobileQueueMessages { handleSendQueueMessage(currentTime, webClient, false, nil, msg) } } for _, mcClient := range cache.MinecraftClients { if len(mcClient.SendQueueMessages) > 0 { logger.Web.Debugln("ackHandler mcClient:", mcClient.Name, "msgs:", mcClient.SendQueueMessages) } for _, msg := range 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 msg.Time = currentTime if webClient != nil { if isVoice { logger.WebVoice.Debugln("ackHandler -> send msg to voice client") err = webClient.SendBinaryMessage(webClient.VoiceConn, msg.MessageRaw) } else { logger.WebMobile.Debugln("ackHandler -> send msg to mobile client") err = webClient.SendBinaryMessage(webClient.MobileConn, msg.MessageRaw) } } else { logger.Minecraft.Debugln("ackHandler -> send msg to mc client", mcClient.Name) err = mcClient.SendBinaryMessage(msg.MessageRaw) } if err != nil { logger.Web.Println("ackHandler err sending msg", err) } if msg.TrySendCount < 4 { msg.TrySendCount++ } } }