]> git.scottworley.com Git - reliable-chat/blobdiff - server/server.go
Add a test
[reliable-chat] / server / server.go
index a8b1c5334f3a778370d4ed58f00a1503fe3bb23e..8d4e897c36fc4c877b00b677844b0194c1660f69 100644 (file)
@@ -11,11 +11,6 @@ type Message struct {
        Text string
 }
 
-type FetchResponse struct {
-       Messages []Message
-       Time     time.Time
-}
-
 type StoreRequest struct {
        StartTime time.Time
        Messages  chan<- []Message
@@ -48,7 +43,7 @@ func manage_store(store Store) {
                                messages.Remove(messages.Front())
                        }
                case request := <-store.Get:
-                       if messages.Back() == nil || request.StartTime.After(messages.Back().Value.(Message).Time) {
+                       if messages.Back() == nil || !request.StartTime.Before(messages.Back().Value.(Message).Time) {
                                waiting.PushBack(request)
                        } else {
                                start := messages.Back()
@@ -80,11 +75,21 @@ func start_store() Store {
 
 func start_server(store Store) {
        http.HandleFunc("/fetch", func(w http.ResponseWriter, r *http.Request) {
-               var since time.Time // TODO: Get start time from URL
+               var since time.Time
+               url_since := r.FormValue("since")
+               if url_since != "" {
+                       err := json.Unmarshal([]byte(url_since), &since)
+                       if err != nil {
+                               log.Print("fetch: parse since: ", err)
+                               w.WriteHeader(http.StatusBadRequest)
+                               w.Write([]byte("Could not parse since as date"))
+                               return
+                       }
+               }
                messages_from_store := make(chan []Message, 1)
                store.Get <- StoreRequest{since, messages_from_store}
 
-               json_encoded, err := json.Marshal(FetchResponse{<-messages_from_store, time.Now()})
+               json_encoded, err := json.Marshal(<-messages_from_store)
                if err != nil {
                        log.Print("json encode: ", err)
                        w.WriteHeader(http.StatusInternalServerError)
@@ -95,8 +100,7 @@ func start_server(store Store) {
        })
 
        http.HandleFunc("/speak", func(w http.ResponseWriter, r *http.Request) {
-               text := "woof" // TODO: Get text from URL
-               store.Add <- Message{time.Now(), text}
+               store.Add <- Message{time.Now(), r.FormValue("text")}
        })
 
        log.Fatal(http.ListenAndServe(":8080", nil))