diff --git a/cmd/mtwebmapper/players.go b/cmd/mtwebmapper/players.go index 947f5e5..8a9ca92 100644 --- a/cmd/mtwebmapper/players.go +++ b/cmd/mtwebmapper/players.go @@ -1,14 +1,19 @@ package main import ( + "bufio" "bytes" "encoding/json" "html/template" "log" "net/http" + "os" "sync" + "time" ) +const sleepInterval = time.Second * 5 + var geoJSONTmpl = template.Must(template.New("geojson").Parse( `{ "type": "Feature", "geometry": { @@ -21,10 +26,10 @@ var geoJSONTmpl = template.Must(template.New("geojson").Parse( }`)) type player struct { - X float64 - Y float64 - Z float64 - Name string + X float64 `json:"x"` + Y float64 `json:"y"` + Z float64 `json:"z"` + Name string `json:"name"` } type players struct { @@ -46,9 +51,33 @@ func (p *player) MarshalJSON() ([]byte, error) { return buf.Bytes(), nil } +func (ps *players) readFromFIFO() ([]*player, error) { + file, err := os.Open(ps.fifo) + if err != nil { + return nil, err + } + defer file.Close() + reader := bufio.NewReader(file) + decoder := json.NewDecoder(reader) + var pls []*player + + if err = decoder.Decode(&pls); err != nil { + return nil, err + } + return pls, nil +} + func (ps *players) run() { for { - // TODO: Implement me! + pls, err := ps.readFromFIFO() + if err != nil { + time.Sleep(sleepInterval) + continue + } + ps.mu.Lock() + ps.pls = pls + ps.mu.Unlock() + // TODO: Implement websocket broadcast. } }