package cache import ( "sync" "github.com/gofiber/websocket/v2" "lms.de/backend/modules/structs" ) var socketClients []*structs.SocketClient var mu sync.RWMutex func AddSocketClient(socketClient *structs.SocketClient) { mu.Lock() socketClients = append(socketClients, socketClient) mu.Unlock() } func DeleteClientByConn(conn *websocket.Conn) { mu.Lock() for i := 0; i < len(socketClients); i++ { if socketClients[i].Conn == conn { socketClients = removeSocketClient(socketClients, i) break } } mu.Unlock() } func removeSocketClient(s []*structs.SocketClient, i int) []*structs.SocketClient { return append(s[:i], s[i+1:]...) } func GetSocketClients() []*structs.SocketClient { mu.RLock() defer mu.RUnlock() return socketClients } func SubscribeSocketClientToTopic(browserTabSession string, topic string) { mu.Lock() defer mu.Unlock() for _, socketClient := range socketClients { if socketClient.BrowserTabSession == browserTabSession { socketClient.SubscribedTopic = topic break } } }