stratux/managementinterface.go

63 wiersze
1.2 KiB
Go

package main
import (
"encoding/json"
"log"
"time"
"golang.org/x/net/websocket"
"io"
"net/http"
)
type SettingMessage struct {
Setting string `json:"setting"`
Value string `json:"state"`
}
func statusSender(conn *websocket.Conn) {
timer := time.NewTicker(1 * time.Second)
for {
<-timer.C
resp, _ := json.Marshal(&globalStatus)
_, err := conn.Write(resp)
if err != nil {
log.Printf("Web client disconnected.\n")
break
}
}
}
func handleManagementConnection(conn *websocket.Conn) {
go statusSender(conn)
for {
var msg SettingMessage
err := websocket.JSON.Receive(conn, &msg)
if err == io.EOF {
break
} else if err != nil {
log.Printf("handleManagementConnection: %s\n", err.Error())
} else {
// TODO: Update specified setting
// TODO: Send new setting to all the other clients
}
}
}
func managementInterface() {
http.HandleFunc("/",
func (w http.ResponseWriter, req *http.Request) {
s := websocket.Server{
Handler: websocket.Handler(handleManagementConnection)}
s.ServeHTTP(w, req)
});
err := http.ListenAndServe(managementAddr, nil)
if err != nil {
log.Printf("managementInterface ListenAndServe: %s\n", err.Error())
}
}