72 lines
1.2 KiB
Go

package frontend
import (
"embed"
"fmt"
"log"
"net/http"
"github.com/gorilla/websocket"
)
//go:embed www
var staticFiles embed.FS
func home(w http.ResponseWriter, r *http.Request) {
content, err := staticFiles.ReadFile("www/index.html")
if err != nil {
log.Printf("Could not Read file %v", err)
}
fmt.Fprintf(w, string(content))
}
var upgrader = websocket.Upgrader{} // use default options
type ValueChangeResp struct {
Cmd string `json:"cmd"`
Name string `json:"name"`
Value string `json:"value"`
}
func echo(w http.ResponseWriter, r *http.Request) {
type resp struct {
Cmd string `json:"cmd"`
Arg string `json:"arg"`
}
c, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Print("upgrade:", err)
return
}
defer c.Close()
for {
_, message, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
break
}
log.Printf("recv: %s", message)
jsonResp := resp{
Cmd: "echo",
Arg: string(message),
}
err = c.WriteJSON(jsonResp)
if err != nil {
log.Println("write:", err)
break
}
}
}
func StartServer() {
http.Handle("/www/", http.FileServer(http.FS(staticFiles)))
http.HandleFunc("/", home)
http.HandleFunc("/echo", echo)
http.ListenAndServe("0.0.0.0:8000", nil)
}