| 
									
										
										
										
											2015-12-07 19:57:01 +01:00
										 |  |  | // Copyright 2015 The Hugo Authors. All rights reserved.
 | 
					
						
							| 
									
										
										
										
											2014-05-16 17:49:27 -04:00
										 |  |  | //
 | 
					
						
							| 
									
										
										
										
											2015-11-23 22:16:36 -05:00
										 |  |  | // Licensed under the Apache License, Version 2.0 (the "License");
 | 
					
						
							| 
									
										
										
										
											2014-05-16 17:49:27 -04:00
										 |  |  | // you may not use this file except in compliance with the License.
 | 
					
						
							|  |  |  | // You may obtain a copy of the License at
 | 
					
						
							| 
									
										
										
										
											2015-11-23 22:16:36 -05:00
										 |  |  | // http://www.apache.org/licenses/LICENSE-2.0
 | 
					
						
							| 
									
										
										
										
											2014-05-16 17:49:27 -04:00
										 |  |  | //
 | 
					
						
							|  |  |  | // Unless required by applicable law or agreed to in writing, software
 | 
					
						
							|  |  |  | // distributed under the License is distributed on an "AS IS" BASIS,
 | 
					
						
							|  |  |  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
					
						
							|  |  |  | // See the License for the specific language governing permissions and
 | 
					
						
							|  |  |  | // limitations under the License.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | package livereload
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 wsHub = 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:
 | 
					
						
							|  |  |  | 			delete(h.connections, c)
 | 
					
						
							| 
									
										
										
										
											2017-04-30 01:10:03 +02:00
										 |  |  | 			c.close()
 | 
					
						
							| 
									
										
										
										
											2014-05-16 17:49:27 -04:00
										 |  |  | 		case m := <-h.broadcast:
 | 
					
						
							|  |  |  | 			for c := range h.connections {
 | 
					
						
							|  |  |  | 				select {
 | 
					
						
							|  |  |  | 				case c.send <- m:
 | 
					
						
							|  |  |  | 				default:
 | 
					
						
							|  |  |  | 					delete(h.connections, c)
 | 
					
						
							| 
									
										
										
										
											2017-04-30 01:10:03 +02:00
										 |  |  | 					c.close()
 | 
					
						
							| 
									
										
										
										
											2014-05-16 17:49:27 -04:00
										 |  |  | 				}
 | 
					
						
							|  |  |  | 			}
 | 
					
						
							|  |  |  | 		}
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | }
 |