| 308 | } |
| 309 | |
| 310 | func (h *Handler) serveWebSocket(rw http.ResponseWriter, req *http.Request) { |
| 311 | ws, err := upgrader.Upgrade(rw, req, nil) |
| 312 | if _, ok := err.(websocket.HandshakeError); ok { |
| 313 | http.Error(rw, "Not a websocket handshake", http.StatusBadRequest) |
| 314 | return |
| 315 | } else if err != nil { |
| 316 | log.Println(err) |
| 317 | return |
| 318 | } |
| 319 | c := &wsConn{ |
| 320 | ws: ws, |
| 321 | send: make(chan []byte, 256), |
| 322 | sh: h, |
| 323 | queries: make(map[string]*watchedQuery), |
| 324 | } |
| 325 | h.wsHub.register <- c |
| 326 | go c.writePump() |
| 327 | c.readPump() |
| 328 | } |