subscribe.go 596 B

12345678910111213141516171819202122232425262728293031323334
  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. mutex.RLock()
  24. defer mutex.RUnlock()
  25. for _, evtChan := range clientMap {
  26. evtChan <- data
  27. }
  28. }