Browse code

getEvents a bit simpler

Victor Vieux authored on 2013/07/17 22:56:09
Showing 1 changed files
... ...
@@ -218,20 +218,21 @@ func getInfo(srv *Server, version float64, w http.ResponseWriter, r *http.Reques
218 218
 }
219 219
 
220 220
 func getEvents(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
221
-	sendEvent := func(wf *utils.WriteFlusher, event *utils.JSONMessage) (bool, error) {
221
+	sendEvent := func(wf *utils.WriteFlusher, event *utils.JSONMessage) (error) {
222 222
 		b, err := json.Marshal(event)
223 223
 		if err != nil {
224
-			return true, nil
224
+			return fmt.Errorf("JSON error")
225 225
 		}
226 226
 		_, err = wf.Write(b)
227 227
 		if err != nil {
228
+			// On error, evict the listener
228 229
 			utils.Debugf("%s", err)
229 230
 			srv.Lock()
230 231
 			delete(srv.listeners, r.RemoteAddr)
231 232
 			srv.Unlock()
232
-			return false, err
233
+			return err
233 234
 		}
234
-		return false, nil
235
+		return nil
235 236
 	}
236 237
 
237 238
 	if err := parseForm(r); err != nil {
... ...
@@ -248,10 +249,11 @@ func getEvents(srv *Server, version float64, w http.ResponseWriter, r *http.Requ
248 248
 	w.Header().Set("Content-Type", "application/json")
249 249
 	wf := utils.NewWriteFlusher(w)
250 250
 	if since != 0 {
251
+		// If since, send previous events that happened after the timestamp
251 252
 		for _, event := range srv.events {
252 253
 			if event.Time >= since {
253
-				skip, err := sendEvent(wf, &event)
254
-				if skip {
254
+				err := sendEvent(wf, &event)
255
+				if err != nil && err.Error() == "JSON error" {
255 256
 					continue
256 257
 				}
257 258
 				if err != nil {
... ...
@@ -262,8 +264,8 @@ func getEvents(srv *Server, version float64, w http.ResponseWriter, r *http.Requ
262 262
 	}
263 263
 	for {
264 264
 		event := <-listener
265
-		skip, err := sendEvent(wf, &event)
266
-		if skip {
265
+		err := sendEvent(wf, &event)
266
+		if err != nil && err.Error() == "JSON error" {
267 267
 			continue
268 268
 		}
269 269
 		if err != nil {