commit c95e86e2147f11f17f1b2fa1cb32023fe12365fe Author: Piotr Dobrowolski Date: Mon Nov 6 22:34:51 2023 +0100 initial commit diff --git a/frontend.html b/frontend.html new file mode 100644 index 0000000..cdbbb03 --- /dev/null +++ b/frontend.html @@ -0,0 +1,94 @@ +

+ + + + + + + +

+ +

+ + +

+ + diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..1eb1b1d --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module github.com/informatic/wled-streamer + +go 1.20 + +require github.com/gorilla/websocket v1.5.0 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..e5a03d4 --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= diff --git a/server.go b/server.go new file mode 100644 index 0000000..8a08449 --- /dev/null +++ b/server.go @@ -0,0 +1,55 @@ +package main + +import ( + "flag" + "html/template" + "log" + "net" + "net/http" + + "github.com/gorilla/websocket" +) + +var addr = flag.String("addr", "localhost:8080", "http service address") +var target = flag.String("target", "localhost:2137", "target wled UDP port") + +var upgrader = websocket.Upgrader{} // use default options + +func stream(w http.ResponseWriter, r *http.Request) { + c, err := upgrader.Upgrade(w, r, nil) + if err != nil { + log.Print("upgrade:", err) + return + } + conn, err := net.Dial("udp", *target) + + defer c.Close() + for { + mt, message, err := c.ReadMessage() + if err != nil { + log.Println("read:", err) + break + } + log.Printf("recv: %d mt: %s", len(message), mt) + conn.Write(message) + // err = c.WriteMessage(mt, message) + if err != nil { + log.Println("write:", err) + break + } + } +} + +func home(w http.ResponseWriter, r *http.Request) { + homeTemplate.Execute(w, "ws://"+r.Host+"/echo") +} + +func main() { + flag.Parse() + log.SetFlags(0) + http.HandleFunc("/stream", stream) + http.HandleFunc("/", home) + upgrader.CheckOrigin = func(r *http.Request) bool { return true } + log.Printf("Listening on %s...", *addr) + log.Fatal(http.ListenAndServe(*addr, nil)) +}