package socketserver import ( "encoding/json" "time" "clickandjoin.app/managementsystem/modules/cache" "clickandjoin.app/managementsystem/modules/structs" "clickandjoin.app/managementsystem/socketclients" gocnjhelper "git.clickandjoin.umbach.dev/ClickandJoin/go-cnj-helper" "github.com/gofiber/websocket/v2" "github.com/google/uuid" ) var register = make(chan *structs.SocketClient) var broadcast = make(chan structs.SocketMessage) var unregister = make(chan *websocket.Conn) func RunHub() { for { select { case newSocketClient := <-register: newSocketClient.ClientId = uuid.New().String() gocnjhelper.LogDebugf("REGISTER CLIENT: %s", newSocketClient.ClientId) cache.AddSocketClient(newSocketClient.ClientId, newSocketClient) socketclients.BroadcastViewersCountMessage(1) if socketClient, ok := cache.GetSocketClient(newSocketClient.ClientId); ok { lastMessages, err := json.Marshal(cache.GetlastLogMessages()) if err != nil { gocnjhelper.LogDebugf("Failed to marshal last messages, err: %s") continue } socketClient.SendMessage(gocnjhelper.RabbitMqLogMessage{ MessageType: 101, ServiceName: 101, ServiceType: 101, Msg: string(lastMessages), Timestamp: time.Now().Unix(), }) } case data := <-broadcast: gocnjhelper.LogDebugf("RECEIVED WEBSOCKET MESSAGE: %s", data.Msg) case connection := <-unregister: for id, client := range cache.GetSocketClients() { if connection == client.Conn { gocnjhelper.LogDebugf("UNREGISTER CLIENT: %s", id) cache.DeleteClient(id) socketclients.BroadcastViewersCountMessage(0) } } } } }