package server
import (
"log"
"net/http"
"time"
"github.com/keys-pub/keys"
"github.com/keys-pub/keys/encoding"
"github.com/pkg/errors"
)
func liveness(w http.ResponseWriter, r *http.Request) {
_, _ = w.Write([]byte("OK"))
}
func readiness(w http.ResponseWriter, r *http.Request) {
_, _ = w.Write([]byte("OK"))
}
type ServeOptions struct{}
func decodeKey(secretKey string) (*[32]byte, error) {
if secretKey == "" {
return nil, errors.Errorf("empty secret key")
}
key, err := encoding.Decode(secretKey, encoding.Hex)
if err != nil {
return nil, err
}
return keys.Bytes32(key), nil
}
func ListenAndServe(addr string, url string, secretKey string, opts *ServeOptions) error {
sk, err := decodeKey(secretKey)
if err != nil {
return err
}
hub := NewHub(url)
rds := NewRedis(hub, sk)
hub.rds = rds
go func() {
for {
if err := rds.Subscribe(); err != nil {
log.Printf("error in subscribe: %v", err)
time.Sleep(time.Second * 2)
}
}
}()
go hub.Run()
http.HandleFunc("/liveness_check", liveness)
http.HandleFunc("/readiness_check", readiness)
http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
Serve(hub, w, r)
})
log.Printf("listen on %s\n", addr)
return http.ListenAndServe(addr, nil)
}