knowyt/server/handler/sync.go
2021-07-29 21:06:25 +02:00

39 lines
627 B
Go

package handler
import (
"fmt"
"github.com/imkira/go-observer"
"net/http"
"strconv"
)
type Value struct {
Value int
}
func SyncFactory(obs observer.Property) HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
refId, err := strconv.Atoi(r.URL.Query().Get("ref"))
if err != nil {
refId = -1
}
stream := obs.Observe()
var value Value
for {
value = stream.Value().(Value)
if value.Value > refId {
break
}
select {
case <-stream.Changes():
stream.Next()
}
}
w.Header().Add("Content-Type", "text/plain")
fmt.Fprintf(w, "%d (%d)\n", value.Value, refId)
}
}