12 Commits

Author SHA1 Message Date
bel
934158b7a3 y no ui 2023-04-02 11:15:51 -06:00
bel
87e63c27df go build 2023-04-02 11:13:28 -06:00
bel
f98e417ba6 gr 2023-04-02 11:13:13 -06:00
bel
d6a7ee3db0 grrr 2023-04-02 11:11:26 -06:00
bel
b814dabfd3 gr 2023-04-02 11:10:03 -06:00
bel
0a91fc656d sh 2023-04-02 11:08:16 -06:00
bel
5c3341e260 condense status 2023-04-02 11:07:21 -06:00
bel
0903c01b9a verbose user feedback 2023-04-02 10:56:35 -06:00
bel
342e2eef93 alias formatting 2023-04-02 10:44:14 -06:00
bel
b8b076450e debug 2023-04-02 10:33:20 -06:00
bel
3bb7cad554 debug 2023-04-02 10:28:12 -06:00
bel
44ec540db3 msg 2023-04-02 09:57:43 -06:00
4 changed files with 71 additions and 40 deletions

View File

@@ -1,6 +1,12 @@
package button package button
import "fmt"
type Button struct { type Button struct {
Char byte Char byte
Down bool Down bool
} }
func (button Button) String() string {
return fmt.Sprintf("%c:%v", button.Char, button.Down)
}

View File

@@ -84,11 +84,21 @@ func (v01 *V01) getUserFeedback(w http.ResponseWriter, r *http.Request) {
msg = v01.cfg.Broadcast.Message msg = v01.cfg.Broadcast.Message
} }
if user.State.GM.Alias != "" { alias := user.State.GM.Alias
msg = fmt.Sprintf("%s (Your secret word is '%s'. Make **someone else** say it!)", msg, user.State.GM.Alias) if alias == "" {
alias = user.State.GM.LastAlias
}
if alias != "" {
msg = fmt.Sprintf("%s (Your secret word is '%s'. Make **someone else** say it!)", msg, alias)
} }
w.Write([]byte(msg)) w.Write([]byte(msg + "\n\n"))
v01.serveGMStatus(w)
if v01.cfg.Quiet {
w.Write([]byte("\n\n"))
v01.serveGMVoteRead(w)
}
} }
func (v01 *V01) servePutBroadcast(w http.ResponseWriter, r *http.Request) { func (v01 *V01) servePutBroadcast(w http.ResponseWriter, r *http.Request) {
@@ -166,7 +176,7 @@ func (v01 *V01) serveGlobalQueryRefresh(r *http.Request) {
func (v01 *V01) serveGM(w http.ResponseWriter, r *http.Request) { func (v01 *V01) serveGM(w http.ResponseWriter, r *http.Request) {
switch r.URL.Path { switch r.URL.Path {
case "/gm/rpc/status": case "/gm/rpc/status":
v01.serveGMStatus(w, r) v01.serveGMStatus(w)
case "/gm/rpc/broadcastSomeoneSaidAlias": case "/gm/rpc/broadcastSomeoneSaidAlias":
v01.serveGMSomeoneSaidAlias(w, r) v01.serveGMSomeoneSaidAlias(w, r)
case "/gm/rpc/fillNonPlayerAliases": case "/gm/rpc/fillNonPlayerAliases":
@@ -188,25 +198,29 @@ func (v01 *V01) serveGM(w http.ResponseWriter, r *http.Request) {
} }
} }
func (v01 *V01) serveGMStatus(w http.ResponseWriter, r *http.Request) { func (v01 *V01) serveGMStatus(w io.Writer) {
users := map[string]struct { users := map[string]string{}
Lag time.Duration `yaml:"lag,omitempty"`
Player int `yaml:"player,omitempty"`
IdleFor time.Duration `yaml:"idle_for,omitempty"`
}{}
for k, v := range v01.cfg.Users { for k, v := range v01.cfg.Users {
v2 := users[k] result := ""
v2.Lag = time.Duration(v.Meta.LastLag) * time.Millisecond
v2.Player = v.State.Player if v.State.Player > 0 {
if v.Meta.LastTSMS > 0 { result += fmt.Sprintf("Player %v ", v.State.Player)
v2.IdleFor = time.Since(time.Unix(0, v.Meta.LastTSMS*int64(time.Millisecond)))
} }
users[k] = v2
if ms := time.Duration(v.Meta.LastLag) * time.Millisecond; v.Meta.LastLag > 0 && ms < time.Minute {
result += fmt.Sprintf("%s ", ms.String())
} }
yaml.NewEncoder(w).Encode(map[string]interface{}{
if result == "" {
result = "..."
}
users[k] = result
}
b, _ := yaml.Marshal(map[string]interface{}{
"Players": len(v01.cfg.Players), "Players": len(v01.cfg.Players),
"Users": users, "Users": users,
}) })
w.Write(b)
} }
func (v01 *V01) serveGMSomeoneSaidAlias(w http.ResponseWriter, r *http.Request) { func (v01 *V01) serveGMSomeoneSaidAlias(w http.ResponseWriter, r *http.Request) {
@@ -287,6 +301,13 @@ func (v01 *V01) serveGMElect(w http.ResponseWriter, r *http.Request) {
func (v01 *V01) serveGMVote(w http.ResponseWriter, r *http.Request) { func (v01 *V01) serveGMVote(w http.ResponseWriter, r *http.Request) {
switch r.URL.Query().Get("payload") { switch r.URL.Query().Get("payload") {
case "": case "":
v01.serveGMVoteRead(w)
default:
v01.serveGMVoteWrite(w, r)
}
}
func (v01 *V01) serveGMVoteRead(w io.Writer) {
counts := map[string]string{} counts := map[string]string{}
for k, v := range v01.cfg.Users { for k, v := range v01.cfg.Users {
if v.State.GM.Vote != "" { if v.State.GM.Vote != "" {
@@ -296,7 +317,9 @@ func (v01 *V01) serveGMVote(w http.ResponseWriter, r *http.Request) {
} }
} }
yaml.NewEncoder(w).Encode(counts) yaml.NewEncoder(w).Encode(counts)
default: }
func (v01 *V01) serveGMVoteWrite(w http.ResponseWriter, r *http.Request) {
voter := r.URL.Query().Get("user") voter := r.URL.Query().Get("user")
candidate := r.URL.Query().Get("payload") candidate := r.URL.Query().Get("payload")
v, ok := v01.cfg.Users[voter] v, ok := v01.cfg.Users[voter]
@@ -306,7 +329,6 @@ func (v01 *V01) serveGMVote(w http.ResponseWriter, r *http.Request) {
} }
v.State.GM.Vote = candidate v.State.GM.Vote = candidate
v01.cfg.Users[voter] = v v01.cfg.Users[voter] = v
}
} }
func (v01 *V01) serveGMShuffle(r *http.Request) { func (v01 *V01) serveGMShuffle(r *http.Request) {

View File

@@ -123,8 +123,8 @@ func TestV01Feedback(t *testing.T) {
} }
defer resp.Body.Close() defer resp.Body.Close()
b, _ := io.ReadAll(resp.Body) b, _ := io.ReadAll(resp.Body)
if string(b) != "to bel" { if !strings.HasPrefix(string(b), "to bel") {
t.Error(b) t.Error(string(b))
} }
}) })
@@ -135,8 +135,8 @@ func TestV01Feedback(t *testing.T) {
} }
defer resp.Body.Close() defer resp.Body.Close()
b, _ := io.ReadAll(resp.Body) b, _ := io.ReadAll(resp.Body)
if string(b) != "to everyone" { if !strings.HasPrefix(string(b), "to everyone") {
t.Error(b) t.Error(string(b))
} }
}) })
@@ -155,7 +155,7 @@ func TestV01Feedback(t *testing.T) {
} }
defer resp.Body.Close() defer resp.Body.Close()
b, _ := io.ReadAll(resp.Body) b, _ := io.ReadAll(resp.Body)
if string(b) != want { if !strings.HasPrefix(string(b), want) {
t.Error(string(b)) t.Error(string(b))
} }
}) })

View File

@@ -50,6 +50,9 @@ func Main(ctx context.Context) error {
keys = append(keys, k) keys = append(keys, k)
} }
} }
if os.Getenv("DEBUG") == "true" {
log.Printf("src.Main.writer.Press(%+v) (from %+v)", keys, delta)
}
writer.Press(keys...) writer.Press(keys...)
} }