package minecraft import ( "github.com/gofiber/websocket/v2" "krakatoa.net/backend/modules/cache" "krakatoa.net/backend/modules/kraProtocol" "krakatoa.net/backend/modules/logger" "krakatoa.net/backend/modules/structs" serverCommunication "krakatoa.net/backend/serverCommunication" ) var register = make(chan *websocket.Conn) var broadcast = make(chan structs.SocketBroadcastData) var unregister = make(chan *websocket.Conn) func RunHub() { for { select { case connection := <-register: servername := connection.Query("s") dest := serverCommunication.GenerateDestForNewMinecraftClient() cache.MinecraftClients[servername] = &structs.MinecraftClient{Name: servername, Dest: dest, Conn: connection} logger.Minecraft.Debugln("connection registered ", connection.Query("c"), connection, "dest:", dest) mcClient := serverCommunication.GetMinecraftClientByConn(connection) raw := kraProtocol.EncodeJavaMessage(kraProtocol.StatusGet, mcClient.GenerateMinecraftCmdID(), 0, kraProtocol.DummyUUID, 33767, mcClient.Dest) err := mcClient.SendBinaryMessage(raw) if err != nil { logger.Minecraft.Warnln("failed to send msg to mc client:", mcClient.Name, "dest:", mcClient.Dest) } case data := <-broadcast: logger.Minecraft.Debugln("message received", data.Msg) go serverCommunication.HandleMinecraftMessage(data.Conn, data.Msg) case connection := <-unregister: for servername, client := range cache.MinecraftClients { if client.Conn == connection { delete(cache.MinecraftClients, servername) logger.Minecraft.Debugln("connection unregistered", servername, connection.Query("s")) } } } } }