52 lines
1.3 KiB
Go
52 lines
1.3 KiB
Go
package socketserver
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"janex/admin-dashboard-backend/modules/cache"
|
|
"janex/admin-dashboard-backend/modules/structs"
|
|
"janex/admin-dashboard-backend/socketclients"
|
|
|
|
"github.com/gofiber/websocket/v2"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
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:
|
|
userId := fmt.Sprintf("%v", newSocketClient.Conn.Locals("userId"))
|
|
sessionId := fmt.Sprintf("%v", newSocketClient.Conn.Locals("sessionId"))
|
|
|
|
newSocketClient.SessionId = sessionId
|
|
newSocketClient.UserId = userId
|
|
|
|
cache.AddSocketClient(sessionId, newSocketClient)
|
|
|
|
log.Debug().Msgf("clients: %d", len(cache.GetSocketClients()))
|
|
log.Debug().Msgf("REGISTER CLIENT: %s", sessionId)
|
|
|
|
socketclients.UpdateConnectedUsers()
|
|
|
|
case data := <-broadcast:
|
|
var receivedMessage structs.ReceivedMessage
|
|
|
|
if err := json.Unmarshal(data.Msg, &receivedMessage); err != nil {
|
|
log.Error().Msgf("Failed to unmarshal received msg, err: %s", err)
|
|
continue
|
|
}
|
|
|
|
log.Info().Msgf("Received message: %s", receivedMessage)
|
|
|
|
case connection := <-unregister:
|
|
cache.DeleteClientByConn(connection)
|
|
|
|
socketclients.UpdateConnectedUsers()
|
|
}
|
|
}
|
|
}
|