Backend/modules/structs/MinecraftClient.go

66 lines
1.9 KiB
Go

package structs
import (
"sync"
"github.com/gofiber/websocket/v2"
"krakatoa.net/backend/modules/logger"
)
type MinecraftClient struct {
Name string
Conn *websocket.Conn
connMu sync.Mutex
CmdIDs []int // cache for received cmdIDs
cmdIDMu sync.Mutex
CmdIDsByBackend []*A
CmdIDsByBackendMu sync.Mutex
CurrentCmdIDIndexByBackend int
SendQueueMessages []*SendQueueMessage
sendQueueMessagesMu sync.Mutex
}
func (mcClient *MinecraftClient) SendBinaryMessage(msg []byte) error {
mcClient.connMu.Lock()
defer mcClient.connMu.Unlock()
return mcClient.Conn.WriteMessage(websocket.BinaryMessage, msg)
}
func (mcClient *MinecraftClient) RemoveCmdID(cmdID int) {
mcClient.cmdIDMu.Lock()
defer mcClient.cmdIDMu.Unlock()
newArr, err := removeCmdIDFromList(mcClient.CmdIDs, cmdID)
if err != nil {
logger.Minecraft.Warnln("removeCmdIDFromList:", err)
} else {
mcClient.CmdIDs = newArr
}
}
func (mcClient *MinecraftClient) GenerateMinecraftCmdID() int {
if mcClient.CurrentCmdIDIndexByBackend >= 4294967296 || mcClient.CurrentCmdIDIndexByBackend < 10 {
return 10
}
mcClient.CurrentCmdIDIndexByBackend++
return mcClient.CurrentCmdIDIndexByBackend
}
func (mcClient *MinecraftClient) RemoveSendMessageFromQueueByCmdID(cmdID int) {
mcClient.sendQueueMessagesMu.Lock()
defer mcClient.sendQueueMessagesMu.Unlock()
for index, message := range mcClient.SendQueueMessages {
if message.CmdID == cmdID {
logger.Minecraft.Debugln("RemoveSendMessageFromQueueByCmdID before", mcClient.SendQueueMessages)
newArr := append(mcClient.SendQueueMessages[:index], mcClient.SendQueueMessages[index+1:]...)
mcClient.SendQueueMessages = newArr
logger.Minecraft.Debugln("RemoveSendMessageFromQueueByCmdID after", mcClient.SendQueueMessages)
break
}
}
}