package v01 import ( "io" "log" "mayhem-party/src/device/input/wrap" "net/http" "sync" "syscall" ) func (v01 *V01) listen() { if v01.cfg.Feedback.Addr == "" { return } return v01._listen() } func (v01 *V01) _listen() { mutex := &sync.RWMutex{} s := &http.Server{ Addr: v01.cfg.Feedback.Addr, Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { r = r.WithContext(v01.ctx) if r.Method == http.MethodGet { mutex.RLock() defer mutex.RUnlock() } else { mutex.Lock() defer mutex.Unlock() } v01.ServeHTTP(w, r) }), } go func() { <-v01.ctx.Done() log.Println("closing v01 server") s.Close() }() log.Println("starting v01 server") if err := s.ListenAndServe(); err != nil && v01.ctx.Err() == nil { log.Println("err with v01 server", err) panic(err) } } func (v01 *V01) ServeHTTP(w http.ResponseWriter, r *http.Request) { v01.serveHTTP(w, r) if _, ok := r.URL.Query()["refresh"]; ok { select { case wrap.ChSigUsr1 <- syscall.SIGUSR1: default: } } } func (v01 *V01) serveHTTP(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case "/": v01.getUserFeedback(w, r) case "/broadcast": v01.putBroadcast(w, r) } } func (v01 *V01) getUserFeedback(w http.ResponseWriter, r *http.Request) { user, ok := v01.cfg.Users[r.URL.Query().Get("user")] if !ok { user = v01.cfg.Users["broadcast"] } w.Write([]byte(user.Message)) } func (v01 *V01) putBroadcast(w http.ResponseWriter, r *http.Request) { b, _ := io.ReadAll(r.Body) v := v01.cfg.Users["broadcast"] v.Message = string(b) v01.cfg.Users["broadcast"] = v }