minecraft ack handling
parent
26267c4ffb
commit
eaa8d0b142
|
@ -8,17 +8,17 @@ import (
|
|||
)
|
||||
|
||||
type MinecraftClient struct {
|
||||
Name string
|
||||
Connection *websocket.Conn
|
||||
connMu sync.Mutex
|
||||
CmdIDs []int
|
||||
cmdIDMu sync.Mutex
|
||||
Name string
|
||||
Conn *websocket.Conn
|
||||
connMu sync.Mutex
|
||||
CmdIDs []int
|
||||
cmdIDMu sync.Mutex
|
||||
}
|
||||
|
||||
func (mcClient *MinecraftClient) SendBinaryMessage(conn *websocket.Conn, msg []byte) error {
|
||||
func (mcClient *MinecraftClient) SendBinaryMessage(msg []byte) error {
|
||||
mcClient.connMu.Lock()
|
||||
defer mcClient.connMu.Unlock()
|
||||
return conn.WriteMessage(websocket.BinaryMessage, msg)
|
||||
return mcClient.Conn.WriteMessage(websocket.BinaryMessage, msg)
|
||||
}
|
||||
|
||||
func (mcClient *MinecraftClient) RemoveCmdID(cmdID int) {
|
||||
|
|
|
@ -44,6 +44,36 @@ func HandleMinecraftMessage(conn *websocket.Conn, status int, cmdID int, dest in
|
|||
var raw []byte
|
||||
var err error
|
||||
|
||||
mcClient := GetMinecraftClientByConn(conn)
|
||||
|
||||
if mcClient == nil {
|
||||
raw := kraProtocol.EncodeJavaMessage(kraProtocol.StatusErrTryAgain, cmdID, 0, playerUuid, cmdNumber, "")
|
||||
|
||||
err = conn.WriteMessage(websocket.BinaryMessage, raw)
|
||||
|
||||
if err != nil {
|
||||
logger.Minecraft.Warnln("write err:", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if status == kraProtocol.StatusGet {
|
||||
// cmdID already in queue
|
||||
if isCmdIDInList(mcClient.CmdIDs, cmdID) {
|
||||
raw := kraProtocol.EncodeJavaMessage(kraProtocol.StatusMessageAlreadyInQueue, cmdID, dest, playerUuid, cmdNumber, args)
|
||||
|
||||
err = mcClient.SendBinaryMessage(raw)
|
||||
|
||||
if err != nil {
|
||||
logger.Minecraft.Warnln("write err", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// not in queue, add to queue
|
||||
mcClient.CmdIDs = append(mcClient.CmdIDs, cmdID)
|
||||
}
|
||||
|
||||
if dest == kraProtocol.DestBackend {
|
||||
resArgs := minecraftCommandHandler(cmdNumber, playerUuid)
|
||||
|
||||
|
@ -81,7 +111,7 @@ func HandleMinecraftMessage(conn *websocket.Conn, status int, cmdID int, dest in
|
|||
|
||||
raw := kraProtocol.EncodeJavaMessage(status, cmdID, dest, playerUuid, cmdNumber, args)
|
||||
|
||||
err = client.Connection.WriteMessage(websocket.BinaryMessage, raw)
|
||||
err = client.SendBinaryMessage(raw)
|
||||
|
||||
if err != nil {
|
||||
logger.Minecraft.Warnln("write:", err)
|
||||
|
@ -107,7 +137,7 @@ func SendMessageToServer(dest int, playerUuid string, args string) {
|
|||
raw := kraProtocol.EncodeJavaMessage(10, 1, 2, playerUuid, 15, args)
|
||||
|
||||
if mcClient != nil {
|
||||
mcClient.Connection.WriteMessage(websocket.BinaryMessage, raw)
|
||||
mcClient.SendBinaryMessage(raw)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -123,7 +153,7 @@ func SendMessageToMinecraftServer(status int, dest int, playerUuid string, cmdNu
|
|||
return errors.New("mcClient nil")
|
||||
}
|
||||
|
||||
err := mcClient.Connection.WriteMessage(websocket.BinaryMessage, raw)
|
||||
err := mcClient.SendBinaryMessage(raw)
|
||||
|
||||
if err != nil {
|
||||
logger.Minecraft.Warnln("err", err)
|
||||
|
|
|
@ -27,6 +27,7 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status in
|
|||
return
|
||||
}
|
||||
|
||||
// ack
|
||||
if status == kraProtocol.StatusGet {
|
||||
var cmdIDInList bool
|
||||
|
||||
|
@ -50,7 +51,6 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status in
|
|||
}
|
||||
|
||||
// add cmdID to list
|
||||
|
||||
if isVoice {
|
||||
logger.Web.Debugln("voiceCmdIDs", webClient.VoiceCmdIDs)
|
||||
webClient.VoiceCmdIDs = append(webClient.VoiceCmdIDs, cmdID)
|
||||
|
@ -60,9 +60,9 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status in
|
|||
webClient.MobileCmdIDs = append(webClient.MobileCmdIDs, cmdID)
|
||||
logger.Web.Debugln("after MobileCmdIDs", webClient.MobileCmdIDs)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
logger.Minecraft.Debugln("dest", dest, dest == kraProtocol.DestProxy)
|
||||
// no ack
|
||||
|
||||
if dest == kraProtocol.DestProxy || dest == kraProtocol.DestPlayersCurrentServer { // forwarding message to java / minecraft
|
||||
err = SendMessageToMinecraftServer(status, dest, uuid, cmdNumber, args)
|
||||
|
@ -154,6 +154,7 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status in
|
|||
}
|
||||
}
|
||||
|
||||
/* TODO: delete cmdID if ack was answered
|
||||
if webClient != nil { // remove cmdID from list
|
||||
if isVoice {
|
||||
webClient.RemoveVoiceCmdID(cmdID)
|
||||
|
@ -178,8 +179,8 @@ func HandleWebMessage(isVoice bool, conn *websocket.Conn, uuid string, status in
|
|||
} else {
|
||||
client.MobileCmdIDs = newArr
|
||||
}
|
||||
} */
|
||||
}
|
||||
}
|
||||
} */
|
||||
}
|
||||
|
||||
func voiceCommandHandler(cmdNumber int, uuid string) (args string) {
|
||||
|
|
Loading…
Reference in New Issue