| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package web
- type hub struct {
- // status
- open bool
- // Registered connections.
- connections map[*connection]bool
- // Inbound messages from the connections.
- broadcast chan string
- // Register requests from the connections.
- register chan *connection
- // Unregister requests from connections.
- unregister chan *connection
- }
- var h = hub{
- open: false,
- broadcast: make(chan string),
- register: make(chan *connection),
- unregister: make(chan *connection),
- connections: make(map[*connection]bool),
- }
- func Hub() *hub {
- return &h
- }
- func HubOpen() bool {
- return h.open
- }
- func (h *hub) run() {
- h.open = true
- for {
- select {
- case c := <-h.register:
- h.connections[c] = true
- case c := <-h.unregister:
- delete(h.connections, c)
- close(c.send)
- case m := <-h.broadcast:
- for c := range h.connections {
- select {
- case c.send <- m:
- default:
- delete(h.connections, c)
- close(c.send)
- go c.ws.Close()
- }
- }
- }
- }
- }
- func (h *hub) Send(msg string) {
- h.broadcast <- msg
- }
|