2015-08-28 04:14:52 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2015-08-31 16:24:45 +00:00
|
|
|
"encoding/json"
|
|
|
|
"golang.org/x/net/websocket"
|
|
|
|
"io"
|
|
|
|
"log"
|
|
|
|
"net/http"
|
|
|
|
"time"
|
2015-08-28 04:14:52 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type SettingMessage struct {
|
2015-08-31 16:24:45 +00:00
|
|
|
Setting string `json:"setting"`
|
|
|
|
Value bool `json:"state"`
|
2015-08-28 04:14:52 +00:00
|
|
|
}
|
|
|
|
|
2015-09-14 20:43:30 +00:00
|
|
|
type InfoMessage struct {
|
|
|
|
*status
|
|
|
|
*settings
|
|
|
|
}
|
|
|
|
|
2015-08-28 04:14:52 +00:00
|
|
|
func statusSender(conn *websocket.Conn) {
|
2015-08-31 16:24:45 +00:00
|
|
|
timer := time.NewTicker(1 * time.Second)
|
|
|
|
for {
|
|
|
|
<-timer.C
|
2015-08-28 04:14:52 +00:00
|
|
|
|
2015-09-14 20:43:30 +00:00
|
|
|
update, _ := json.Marshal(InfoMessage{status:&globalStatus, settings:&globalSettings})
|
|
|
|
_, err := conn.Write(update)
|
2015-08-28 04:14:52 +00:00
|
|
|
|
2015-08-31 16:24:45 +00:00
|
|
|
if err != nil {
|
2015-09-04 19:22:10 +00:00
|
|
|
// log.Printf("Web client disconnected.\n")
|
2015-08-31 16:24:45 +00:00
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
2015-08-28 04:14:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func handleManagementConnection(conn *websocket.Conn) {
|
2015-09-04 19:22:10 +00:00
|
|
|
// log.Printf("Web client connected.\n")
|
2015-08-31 16:24:45 +00:00
|
|
|
go statusSender(conn)
|
2015-08-28 04:14:52 +00:00
|
|
|
|
2015-08-31 16:24:45 +00:00
|
|
|
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 {
|
|
|
|
if msg.Setting == "UAT_Enabled" {
|
|
|
|
globalSettings.UAT_Enabled = msg.Value
|
|
|
|
}
|
|
|
|
if msg.Setting == "ES_Enabled" {
|
|
|
|
globalSettings.ES_Enabled = msg.Value
|
|
|
|
}
|
|
|
|
if msg.Setting == "GPS_Enabled" {
|
|
|
|
globalSettings.GPS_Enabled = msg.Value
|
|
|
|
}
|
|
|
|
if msg.Setting == "AHRS_Enabled" {
|
|
|
|
globalSettings.AHRS_Enabled = msg.Value
|
|
|
|
}
|
2015-09-04 21:29:08 +00:00
|
|
|
if msg.Setting == "DEBUG" {
|
|
|
|
globalSettings.DEBUG = msg.Value
|
|
|
|
}
|
2015-08-28 04:14:52 +00:00
|
|
|
|
2015-08-31 16:24:45 +00:00
|
|
|
saveSettings()
|
|
|
|
}
|
|
|
|
}
|
2015-08-28 04:14:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func managementInterface() {
|
2015-08-31 17:02:20 +00:00
|
|
|
http.Handle("/", http.FileServer(http.Dir("/var/www")))
|
2015-09-04 20:44:37 +00:00
|
|
|
http.Handle("/logs/", http.StripPrefix("/logs/", http.FileServer(http.Dir("/var/log"))))
|
2015-08-31 17:02:20 +00:00
|
|
|
http.HandleFunc("/control",
|
2015-08-31 16:24:45 +00:00
|
|
|
func(w http.ResponseWriter, req *http.Request) {
|
|
|
|
s := websocket.Server{
|
|
|
|
Handler: websocket.Handler(handleManagementConnection)}
|
|
|
|
s.ServeHTTP(w, req)
|
|
|
|
})
|
2015-08-28 04:14:52 +00:00
|
|
|
|
2015-08-31 16:24:45 +00:00
|
|
|
err := http.ListenAndServe(managementAddr, nil)
|
2015-08-28 04:14:52 +00:00
|
|
|
|
2015-08-31 16:24:45 +00:00
|
|
|
if err != nil {
|
|
|
|
log.Printf("managementInterface ListenAndServe: %s\n", err.Error())
|
|
|
|
}
|
|
|
|
}
|