Files
yt-dlp-webui/server/rpc/handlers.go
2023-11-19 13:52:51 +01:00

61 lines
1.1 KiB
Go

package rpc
import (
"io"
"log"
"net/http"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true
},
}
func WebSocket(w http.ResponseWriter, r *http.Request) {
c, err := upgrader.Upgrade(w, r, nil)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
defer c.Close()
// notify client that conn is open and ok
c.WriteJSON(struct{ Status string }{Status: "connected"})
for {
mtype, reader, err := c.NextReader()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
log.Println(err)
break
}
res := newRequest(reader).Call()
writer, err := c.NextWriter(mtype)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
log.Println(err)
break
}
io.Copy(writer, res)
}
}
func Post(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
res := newRequest(r.Body).Call()
_, err := io.Copy(w, res)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}