66 lines
1.9 KiB
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
|
|
}
|
|
}
|
|
}
|