62 lines
1.6 KiB
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)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|