hub.go 1013 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package live
  2. import "github.com/grafana/grafana/pkg/log"
  3. type hub struct {
  4. // Registered connections.
  5. connections map[*connection]bool
  6. // Inbound messages from the connections.
  7. broadcast chan []byte
  8. // Register requests from the connections.
  9. register chan *connection
  10. // Unregister requests from connections.
  11. unregister chan *connection
  12. }
  13. var h = hub{
  14. broadcast: make(chan []byte),
  15. register: make(chan *connection),
  16. unregister: make(chan *connection),
  17. connections: make(map[*connection]bool),
  18. }
  19. func (h *hub) run() {
  20. for {
  21. select {
  22. case c := <-h.register:
  23. h.connections[c] = true
  24. case c := <-h.unregister:
  25. if _, ok := h.connections[c]; ok {
  26. delete(h.connections, c)
  27. close(c.send)
  28. }
  29. case m := <-h.broadcast:
  30. log.Info("Live: broadcasting")
  31. for c := range h.connections {
  32. select {
  33. case c.send <- m:
  34. default:
  35. close(c.send)
  36. delete(h.connections, c)
  37. }
  38. }
  39. }
  40. }
  41. }
  42. func SendMessage(message string) {
  43. h.broadcast <- []byte(message)
  44. }