OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / gorilla / websocket / examples / chat / hub.go
1 // Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 package main
6
7 // Hub maintains the set of active clients and broadcasts messages to the
8 // clients.
9 type Hub struct {
10         // Registered clients.
11         clients map[*Client]bool
12
13         // Inbound messages from the clients.
14         broadcast chan []byte
15
16         // Register requests from the clients.
17         register chan *Client
18
19         // Unregister requests from clients.
20         unregister chan *Client
21 }
22
23 func newHub() *Hub {
24         return &Hub{
25                 broadcast:  make(chan []byte),
26                 register:   make(chan *Client),
27                 unregister: make(chan *Client),
28                 clients:    make(map[*Client]bool),
29         }
30 }
31
32 func (h *Hub) run() {
33         for {
34                 select {
35                 case client := <-h.register:
36                         h.clients[client] = true
37                 case client := <-h.unregister:
38                         if _, ok := h.clients[client]; ok {
39                                 delete(h.clients, client)
40                                 close(client.send)
41                         }
42                 case message := <-h.broadcast:
43                         for client := range h.clients {
44                                 select {
45                                 case client.send <- message:
46                                 default:
47                                         close(client.send)
48                                         delete(h.clients, client)
49                                 }
50                         }
51                 }
52         }
53 }