12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package dezukvm
- import (
- "encoding/json"
- "net/http"
- )
- func (d *DezukVM) HandleVideoStreams(w http.ResponseWriter, r *http.Request, instanceUuid string) {
- targetInstance, err := d.GetInstanceByUUID(instanceUuid)
- if err != nil {
- http.Error(w, "Instance with specified UUID not found", http.StatusNotFound)
- return
- }
- targetInstance.usbCaptureDevice.ServeVideoStream(w, r)
- }
- func (d *DezukVM) HandleAudioStreams(w http.ResponseWriter, r *http.Request, instanceUuid string) {
- targetInstance, err := d.GetInstanceByUUID(instanceUuid)
- if err != nil {
- http.Error(w, "Instance with specified UUID not found", http.StatusNotFound)
- return
- }
- pcmDevicePath := targetInstance.captureConfig.AudioDeviceName
- targetInstance.usbCaptureDevice.AudioStreamingHandler(w, r, pcmDevicePath)
- }
- func (d *DezukVM) HandleHIDEvents(w http.ResponseWriter, r *http.Request, instanceUuid string) {
- targetInstance, err := d.GetInstanceByUUID(instanceUuid)
- if err != nil {
- http.Error(w, "Instance with specified UUID not found", http.StatusNotFound)
- return
- }
- targetInstance.usbKVMController.HIDWebSocketHandler(w, r)
- }
- // HandleMassStorageSideSwitch handles the request to switch the USB mass storage side.
- // there is only two state for the USB mass storage side, KVM side or Remote side.
- // isKvmSide = true means switch to KVM side, otherwise switch to Remote side.
- func (d *DezukVM) HandleMassStorageSideSwitch(w http.ResponseWriter, r *http.Request, instanceUuid string, isKvmSide bool) {
- targetInstance, err := d.GetInstanceByUUID(instanceUuid)
- if err != nil {
- http.Error(w, "Instance with specified UUID not found", http.StatusNotFound)
- return
- }
- if targetInstance.auxMCUController == nil {
- http.Error(w, "Auxiliary MCU controller not initialized or missing", http.StatusInternalServerError)
- return
- }
- if isKvmSide {
- err = targetInstance.auxMCUController.SwitchUSBToKVM()
- } else {
- err = targetInstance.auxMCUController.SwitchUSBToRemote()
- }
- if err != nil {
- http.Error(w, "Failed to switch USB mass storage side: "+err.Error(), http.StatusInternalServerError)
- return
- }
- w.WriteHeader(http.StatusOK)
- w.Write([]byte("OK"))
- }
- func (d *DezukVM) HandleListInstances(w http.ResponseWriter, r *http.Request) {
- instances := []map[string]interface{}{}
- for _, instance := range d.UsbKvmInstance {
- instances = append(instances, map[string]interface{}{
- "uuid": instance.UUID(),
- "video_capture_dev": instance.Config.VideoCaptureDevicePath,
- "audio_capture_dev": instance.Config.AudioCaptureDevicePath,
- "video_resolution_width": instance.Config.CaptureVideoResolutionWidth,
- "video_resolution_height": instance.Config.CaptureeVideoResolutionHeight,
- "video_framerate": instance.Config.CaptureeVideoFPS,
- "audio_sample_rate": instance.Config.CaptureAudioSampleRate,
- "audio_channels": instance.Config.CaptureAudioChannels,
- "stream_info": instance.usbCaptureDevice.GetStreamInfo(),
- "usb_kvm_device": instance.Config.USBKVMDevicePath,
- "aux_mcu_device": instance.Config.AuxMCUDevicePath,
- "usb_mass_storage_side": instance.auxMCUController.GetUSBMassStorageSide(),
- })
- }
- w.Header().Set("Content-Type", "application/json")
- json.NewEncoder(w).Encode(instances)
- }
|