package ws import ( "net/http" "github.com/gin-gonic/gin" "gorm.io/gorm" "lst.net/pkg/logger" ) var ( broadcaster = make(chan logger.Message) ) func RegisterSocketRoutes(r *gin.Engine, base_url string, log *logger.CustomLogger, db *gorm.DB) { // Initialize all channels InitializeChannels() // Start channel processors StartAllChannels() // Start background services go LogServices(broadcaster, log) go StartBroadcasting(broadcaster, channels) // WebSocket route r.GET(base_url+"/ws", func(c *gin.Context) { SocketHandler(c, channels, log, db) }) r.GET(base_url+"/ws/clients", AdminAuthMiddleware(), handleGetClients) } func handleGetClients(c *gin.Context) { channel := c.Query("channel") var clientList []*Client if channel != "" { clientList = GetClientsByChannel(channel) } else { clientList = GetAllClients() } c.JSON(http.StatusOK, gin.H{ "count": len(clientList), "clients": clientList, }) } func AdminAuthMiddleware() gin.HandlerFunc { return func(c *gin.Context) { // Implement your admin authentication logic // Example: Check API key or JWT token c.Next() } }