72 lines
1.2 KiB
Go
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)
|
|
}
|