mirror of
https://github.com/krishpranav/remote-desktop.git
synced 2025-09-26 20:21:10 +08:00
api: handler[handles service]
This commit is contained in:
85
api/handler.go
Normal file
85
api/handler.go
Normal 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
|
||||
}
|
Reference in New Issue
Block a user