radiodiodio/www/www.go

95 lines
1.7 KiB
Go
Raw Normal View History

2019-01-02 16:11:22 +01:00
package www
import (
"log"
2019-01-02 19:06:45 +01:00
"strconv"
2019-01-02 16:11:22 +01:00
"html/template"
2019-01-02 19:06:45 +01:00
"net/http"
2019-01-02 16:11:22 +01:00
"github.com/gorilla/websocket"
"../playlist"
)
// todo: hub - https://stackoverflow.com/questions/31532652/go-websocket-send-all-clients-a-message
2019-01-03 14:21:24 +01:00
var wsc *websocket.Conn
2019-01-02 16:11:22 +01:00
2019-01-02 19:06:45 +01:00
var p *playlist.Playlist
2019-01-03 14:21:24 +01:00
var pp *playlist.PrettyPlaylist
var mp *playlist.MinimalPlaylist
2019-01-02 16:11:22 +01:00
var pln = log.Println
type op_t struct {
OP string `json:"op"`
ID string `json:"id"`
INDEX int `json:"index"`
}
var upgrader = websocket.Upgrader{
ReadBufferSize: 512,
WriteBufferSize: 512,
}
2019-01-02 19:06:45 +01:00
func Init(playlist *playlist.Playlist) {
p = playlist
2019-01-03 14:21:24 +01:00
p.CALLB = pop_callback
2019-01-02 16:11:22 +01:00
pp = p.Pretty()
2019-01-03 14:21:24 +01:00
mp = p.Minimal()
2019-01-02 16:11:22 +01:00
http.HandleFunc("/pp", pp_handler)
http.HandleFunc("/ppop", pp_operations)
}
func pp_handler(w http.ResponseWriter, r *http.Request) {
t, err := template.ParseFiles("./www/tmpl/playlist.html")
if err != nil {
pln(err)
return
}
pp.Print()
t.Execute(w, pp)
}
func pp_operations(w http.ResponseWriter, r *http.Request) {
pln("x")
c, err := upgrader.Upgrade(w, r, nil)
if err != nil {
pln(err)
return
}
2019-01-03 14:21:24 +01:00
wsc = c // this should be hub
2019-01-02 16:11:22 +01:00
go readop(c)
}
2019-01-03 14:21:24 +01:00
func readop(c *websocket.Conn) {
2019-01-02 16:11:22 +01:00
for {
opdata := &op_t{}
if err := c.ReadJSON(&opdata); err != nil {
pln(err)
return //connection lost?
}
2019-01-02 19:06:45 +01:00
if opdata.OP == "move" {
if id, err := strconv.ParseUint(opdata.ID, 10, 32); err == nil {
p.Move(uint32(id), opdata.INDEX)
pp = p.Pretty()
2019-01-03 14:21:24 +01:00
mp = p.Minimal()
// pp.Print()
2019-01-02 19:06:45 +01:00
}
}
2019-01-03 14:21:24 +01:00
if err := c.WriteJSON(mp); err != nil {
2019-01-02 16:11:22 +01:00
pln(err)
return //connection lost?
}
}
}
2019-01-03 14:21:24 +01:00
func pop_callback(list *playlist.Playlist) {
if list == p {
pp = p.Pretty()
mp = p.Minimal()
if wsc != nil {
wsc.WriteJSON(mp) // this should be hub broadcasted
}
}
}