54 lines
1.7 KiB
Go
54 lines
1.7 KiB
Go
package minecraft
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"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, strconv.Itoa(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"))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|