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) }