Backend/serverCommunication/serverCommunication.go

90 lines
2.6 KiB
Go

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()
logger.Web.Debugln("ack handler running")
for _, webClient := range cache.WebClients {
logger.Web.Debugln("ackHandler voice:", webClient.SendVoiceQueueMessages)
for _, msg := range webClient.SendVoiceQueueMessages {
handleSendQueueMessage(currentTime, webClient, true, nil, msg)
}
logger.Web.Debugln("ackHandler mobile:", webClient.SendMobileQueueMessages)
for _, msg := range webClient.SendMobileQueueMessages {
handleSendQueueMessage(currentTime, webClient, false, nil, msg)
}
}
for _, mcClient := range cache.MinecraftClients {
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++
}
}
}