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