| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package live
- import "github.com/grafana/grafana/pkg/log"
- type hub struct {
- // Registered connections.
- connections map[*connection]bool
- // Inbound messages from the connections.
- broadcast chan []byte
- // Register requests from the connections.
- register chan *connection
- // Unregister requests from connections.
- unregister chan *connection
- }
- var h = hub{
- broadcast: make(chan []byte),
- register: make(chan *connection),
- unregister: make(chan *connection),
- connections: make(map[*connection]bool),
- }
- func (h *hub) run() {
- for {
- select {
- case c := <-h.register:
- h.connections[c] = true
- case c := <-h.unregister:
- if _, ok := h.connections[c]; ok {
- delete(h.connections, c)
- close(c.send)
- }
- case m := <-h.broadcast:
- log.Info("Live: broadcasting")
- for c := range h.connections {
- select {
- case c.send <- m:
- default:
- close(c.send)
- delete(h.connections, c)
- }
- }
- }
- }
- }
- func SendMessage(message string) {
- h.broadcast <- []byte(message)
- }
|