dancefloor-monorepo/go/main.go

93 lines
1.4 KiB
Go
Raw Normal View History

2020-05-03 23:44:38 +01:00
package main
import (
"bytes"
2020-05-04 01:29:45 +01:00
"dancefloor/api"
2020-05-03 23:44:38 +01:00
"dancefloor/patterns"
"encoding/json"
2020-05-04 01:29:45 +01:00
"fmt"
2020-05-03 23:44:38 +01:00
"net/http"
2020-05-04 01:29:45 +01:00
"os"
"strconv"
2020-05-03 23:44:38 +01:00
"sync"
2020-05-04 01:29:45 +01:00
"time"
2020-05-03 23:44:38 +01:00
)
var client http.Client
var lock sync.Mutex
2020-05-04 01:29:45 +01:00
var pattern patterns.Pattern
2020-05-03 23:44:38 +01:00
2020-05-04 01:29:45 +01:00
var address string
2020-05-03 23:44:38 +01:00
var width, height int
func main() {
2020-05-04 01:29:45 +01:00
var err error
address = os.Getenv("ADDRESS")
if address == "" {
fmt.Println("no address provided")
os.Exit(1)
return
}
width, err = strconv.Atoi(os.Getenv("WIDTH"))
if err != nil {
width = 6
err = nil
}
height, err = strconv.Atoi(os.Getenv("HEIGHT"))
if err != nil {
height = 5
err = nil
}
2020-05-03 23:44:38 +01:00
2020-05-04 01:29:45 +01:00
SetPattern(&patterns.SuperRgb{Brightness: 128})
2020-05-03 23:44:38 +01:00
2020-05-04 01:29:45 +01:00
go api.Start(SetPattern)
defer api.Stop()
2020-05-03 23:44:38 +01:00
2020-05-04 01:29:45 +01:00
go drawLoop()
2020-05-03 23:44:38 +01:00
2020-05-04 01:29:45 +01:00
select {}
2020-05-03 23:44:38 +01:00
}
2020-05-04 01:29:45 +01:00
func SetPattern(new patterns.Pattern) {
2020-05-03 23:44:38 +01:00
lock.Lock()
defer lock.Unlock()
pattern = new
}
func draw() *[][]patterns.Colour {
lock.Lock()
defer lock.Unlock()
return pattern.Draw(width, height)
}
func render(data *[][]patterns.Colour) {
content, err := json.Marshal(struct {
Data [][]patterns.Colour `json:"data"`
}{
Data: *data,
})
if err != nil {
panic(err)
}
2020-05-04 01:29:45 +01:00
req, err := http.NewRequest("PUT", fmt.Sprintf("http://%s:5000/update", address), bytes.NewReader(content))
2020-05-03 23:44:38 +01:00
if err != nil {
panic(err)
}
req.Header.Add("Content-Type", "application/json")
_, err = client.Do(req)
if err != nil {
2020-05-04 01:29:45 +01:00
fmt.Println("render request failed")
time.Sleep(time.Second)
2020-05-03 23:44:38 +01:00
}
}
func drawLoop() {
for {
render(draw())
}
}