1
0
Prechádzať zdrojové kódy

[http] adding first draft of server-side message number limit.

Blallo 5 rokov pred
rodič
commit
89c59e5713
1 zmenil súbory, kde vykonal 39 pridanie a 0 odobranie
  1. 39 0
      cmd/circologd/http.go

+ 39 - 0
cmd/circologd/http.go

@@ -1,7 +1,10 @@
 package main
 
 import (
+	"fmt"
 	"net/http"
+	"os"
+	"strconv"
 	"time"
 
 	"git.lattuga.net/boyska/circolog"
@@ -21,9 +24,45 @@ func getHTTPHandler(hub circolog.Hub) http.HandlerFunc {
 			Nofollow: true}
 		hub.Register <- client
 
+		err := r.ParseForm()
+		if err != nil {
+			fmt.Fprintln(os.Stderr, "error parsing http request", err)
+		}
+		// Looking for known parameter in the request
+		// TODO: write specialized function
+		var requestMessageLen int
+		if reqL, ok := r.Form["l"]; ok {
+			var err error
+			switch {
+			case len(reqL) == 1:
+				requestMessageLen, err = strconv.Atoi(reqL[0])
+				if requestMessageLen <= 0 {
+					fmt.Fprintln(os.Stderr, "malformed request, l non positive:", requestMessageLen)
+					//requestMessageLen := 0
+				}
+				if err != nil {
+					fmt.Fprintln(os.Stderr, "malformed request on parameter l:", err)
+				}
+			case len(reqL) > 1:
+				requestMessageLen, err = strconv.Atoi(reqL[len(reqL)-1])
+				fmt.Fprintln(os.Stderr, "multiple values of l parameter, taking last:",
+					requestMessageLen)
+				if err != nil {
+					fmt.Fprintln(os.Stderr, "malformed request on parameter l:", err)
+				}
+			default:
+				fmt.Fprintln(os.Stderr, "empty parameter l in request")
+			}
+		}
+
+		i := 1
 		for x := range client.Messages {
 			w.Write([]byte(circolog.FormatSyslog(x)))
 			w.Write([]byte("\n"))
+			if requestMessageLen != 0 && i >= requestMessageLen {
+				break
+			}
+			i++
 		}
 	}
 }