From 33e5f71f8e5277355291627a24494e4259dc247d Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 15 Mar 2022 21:28:47 +0100 Subject: [PATCH] give each mc client a destination number when connecting --- modules/structs/MinecraftClient.go | 1 + serverCommunication/minecraft.go | 33 ++++++++++++++++++++++++++++-- servers/minecraft/socketHub.go | 2 +- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/modules/structs/MinecraftClient.go b/modules/structs/MinecraftClient.go index 20a34d8..3091f21 100644 --- a/modules/structs/MinecraftClient.go +++ b/modules/structs/MinecraftClient.go @@ -11,6 +11,7 @@ import ( type MinecraftClient struct { Name string + Dest int Conn *websocket.Conn connMu sync.Mutex CmdIDs []int // cache for received cmdIDs diff --git a/serverCommunication/minecraft.go b/serverCommunication/minecraft.go index a7d3b3a..04cc2bc 100644 --- a/serverCommunication/minecraft.go +++ b/serverCommunication/minecraft.go @@ -171,8 +171,8 @@ func HandleMinecraftMessage(conn *websocket.Conn, msg []byte) { raw = kraProtocol.EncodeWebMessage(kraProtocol.StatusGet, webCmdID, cmdNumber, args) - if dest == kraProtocol.DestVoice { - webClient.SendVoiceQueueMessages = append(webClient.SendVoiceQueueMessages, &structs.SendQueueMessage{MessageRaw: raw, CmdID: webCmdID, TrySendCount: 0, Time: time.Now()}) + if dest == kraProtocol.DestVoice { // TODO: correct dest + webClient.SendVoiceQueueMessages = append(webClient.SendVoiceQueueMessages, &structs.SendQueueMessage{MessageRaw: raw, CmdID: webCmdID, TrySendCount: 0, OriginDest: 111111, OriginCmdID: cmdID, Time: time.Now()}) } else { webClient.SendMobileQueueMessages = append(webClient.SendMobileQueueMessages, &structs.SendQueueMessage{MessageRaw: raw, CmdID: webCmdID, TrySendCount: 0, Time: time.Now()}) } @@ -295,3 +295,32 @@ func SendMessageToMinecraftServer(originDest int, originCmdID int, status int, d return nil } + +func GenerateDestForNewMinecraftClient() int { + availableDestFound := false + newDest := 10 + + for !availableDestFound { + if isDestInUsageFromOneMinecraftClient(newDest) { + logger.Minecraft.Debugln("found dest", newDest) + availableDestFound = true + } else { + logger.Minecraft.Debugln("count dest up") + newDest++ + } + } + + logger.Minecraft.Debugln("finally found this dest", newDest) + + return newDest +} + +func isDestInUsageFromOneMinecraftClient(dest int) bool { + for _, mcClient := range cache.MinecraftClients { + if mcClient.Dest == dest { + return true + } + } + + return false +} diff --git a/servers/minecraft/socketHub.go b/servers/minecraft/socketHub.go index 2af0f28..90b7fdc 100644 --- a/servers/minecraft/socketHub.go +++ b/servers/minecraft/socketHub.go @@ -18,7 +18,7 @@ func RunHub() { case connection := <-register: servername := connection.Query("s") - cache.MinecraftClients[servername] = &structs.MinecraftClient{Name: servername, Conn: connection} + cache.MinecraftClients[servername] = &structs.MinecraftClient{Name: servername, Dest: serverCommunication.GenerateDestForNewMinecraftClient(), Conn: connection} logger.Minecraft.Debugln("connection registered ", connection.Query("c"), connection)