Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
934158b7a3 | ||
|
|
87e63c27df | ||
|
|
f98e417ba6 | ||
|
|
d6a7ee3db0 | ||
|
|
b814dabfd3 | ||
|
|
0a91fc656d | ||
|
|
5c3341e260 | ||
|
|
0903c01b9a | ||
|
|
342e2eef93 | ||
|
|
b8b076450e | ||
|
|
3bb7cad554 | ||
|
|
44ec540db3 |
@@ -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)
|
||||||
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -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...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user