api: handler[handles service]

This commit is contained in:
Krisna Pranav
2023-04-15 17:52:22 +05:30
parent c1df3ba9e9
commit b8e07caadb

85
api/handler.go Normal file
View File

@@ -0,0 +1,85 @@
package api
import (
"encoding/json"
"fmt"
"net/http"
"github.com/krishpranav/remote-desktop/rdisplay"
"github.com/krishpranav/remote-desktop/rtc"
)
func handleError(w http.ResponseWriter, err error) {
fmt.Printf("Error: %v", err)
w.WriteHeader(http.StatusInternalServerError)
}
func MakeHandler(webrtc rtc.Service, display rdisplay.Service) http.Handler {
mux := http.NewServeMux()
mux.HandleFunc("/session", func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
w.WriteHeader(http.StatusMethodNotAllowed)
return
}
dec := json.NewDecoder(r.Body)
req := newSessionRequest{}
if err := dec.Decode(&req); err != nil {
handleError(w, err)
return
}
peer, err := webrtc.CreateRemoteScreenConnection(req.Screen, 20)
if err != nil {
handleError(w, err)
return
}
answer, err := peer.ProcessOffer(req.Offer)
if err != nil {
handleError(w, err)
return
}
payload, err := json.Marshal(newSessionResponse{
Answer: answer,
})
if err != nil {
handleError(w, err)
return
}
w.Write(payload)
})
mux.HandleFunc("/screens", func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
w.WriteHeader(http.StatusMethodNotAllowed)
return
}
screens, err := display.Screens()
if err != nil {
handleError(w, err)
return
}
screensPayload := make([]screenPayload, len(screens))
for i, s := range screens {
screensPayload[i].Index = s.Index
}
payload, err := json.Marshal(screensResponse{
Screens: screensPayload,
})
if err != nil {
handleError(w, err)
return
}
w.Write(payload)
})
return mux
}