mayhem-party/src/main.go

61 lines
1.1 KiB
Go

package src
import (
"context"
"log"
"mayhem-party/src/device/input"
"mayhem-party/src/device/output"
"mayhem-party/src/device/output/key"
"os"
"time"
)
func Main(ctx context.Context) error {
reader := input.New(ctx)
writer := output.New(ctx)
defer writer.Close()
defer reader.Close()
interval := time.Millisecond * 50
if intervalS := os.Getenv("MAIN_INTERVAL_DURATION"); intervalS == "" {
} else if v, err := time.ParseDuration(intervalS); err != nil {
return err
} else {
interval = v
}
c := time.NewTicker(interval)
defer c.Stop()
block := func() bool {
select {
case <-c.C:
return true
case <-ctx.Done():
return false
}
}
state := map[key.Key]bool{}
for block() {
delta := reader.Read()
if os.Getenv("DEBUG") == "true" {
log.Printf("src.Main.reader.Read(): %+v", delta)
}
for _, button := range delta {
state[key.FromChar(button.Char)] = button.Down
}
keys := make([]key.Key, 0)
for k, v := range state {
if v {
keys = append(keys, k)
}
}
if os.Getenv("DEBUG") == "true" {
log.Printf("src.Main.writer.Press(%+v) (from %+v)", keys, delta)
}
writer.Press(keys...)
}
return ctx.Err()
}