ManagementSystem/socketserver/hub.go

62 lines
1.6 KiB
Go

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)
}
}
}
}
}