subscribe.go 689 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package notification
  2. import (
  3. "sync"
  4. "github.com/0xJacky/Nginx-UI/model"
  5. "github.com/gin-gonic/gin"
  6. )
  7. var (
  8. clientMap = make(map[*gin.Context]chan *model.Notification)
  9. mutex = &sync.RWMutex{}
  10. )
  11. func SetClient(c *gin.Context, evtChan chan *model.Notification) {
  12. mutex.Lock()
  13. defer mutex.Unlock()
  14. clientMap[c] = evtChan
  15. }
  16. func RemoveClient(c *gin.Context) {
  17. mutex.Lock()
  18. defer mutex.Unlock()
  19. close(clientMap[c])
  20. delete(clientMap, c)
  21. }
  22. func broadcast(data *model.Notification) {
  23. // Broadcast to SSE clients
  24. mutex.RLock()
  25. defer mutex.RUnlock()
  26. for _, evtChan := range clientMap {
  27. evtChan <- data
  28. }
  29. // Broadcast to WebSocket clients
  30. BroadcastToWebSocket(data)
  31. }