// HandleWS implements a websocket handler. func (w *WatchServer) HandleWS(ws *websocket.Conn) { defer ws.Close() done := make(chan struct{}) go func() { var unused interface{} // Expect this to block until the connection is closed. Client should not // send anything. websocket.JSON.Receive(ws, &unused) close(done) }() for { select { case <-done: w.watching.Stop() return case event, ok := <-w.watching.ResultChan(): if !ok { // End of results. return } w.fixup(event.Object) obj, err := watchjson.Object(w.codec, &event) if err != nil { // Client disconnect. w.watching.Stop() return } if err := websocket.JSON.Send(ws, obj); err != nil { // Client disconnect. w.watching.Stop() return } } } }
// eventString marshals the event into a string func eventString(e *watch.Event) string { obj, _ := watchjson.Object(v1beta3.Codec, e) s, _ := json.Marshal(obj) return string(s) }
// eventString marshals the event into a string func eventString(e *watch.Event) string { obj, _ := watchjson.Object(kapi.Codecs.LegacyCodec(v1.SchemeGroupVersion), e) s, _ := json.Marshal(obj) return string(s) }