@@ -151,55 +151,35 @@ func handleJSONRPC(w http.ResponseWriter, r *http.Request) {
151151 var result interface {}
152152 var err error
153153
154- switch req .Method {
155- case "devices" :
156- result , err = handleDevicesList (req .Params )
157- case "screenshot" :
158- result , err = handleScreenshot (req .Params )
159- case "screencapture" :
154+ // Special case: screencapture is streaming and has different signature
155+ if req .Method == "screencapture" {
160156 err = handleScreenCapture (w , req .Params )
161- case "io_tap" :
162- result , err = handleIoTap (req .Params )
163- case "io_longpress" :
164- result , err = handleIoLongPress (req .Params )
165- case "io_text" :
166- result , err = handleIoText (req .Params )
167- case "io_button" :
168- result , err = handleIoButton (req .Params )
169- case "io_swipe" :
170- result , err = handleIoSwipe (req .Params )
171- case "io_gesture" :
172- result , err = handleIoGesture (req .Params )
173- case "url" :
174- result , err = handleURL (req .Params )
175- case "device_info" :
176- result , err = handleDeviceInfo (req .Params )
177- case "io_orientation_get" :
178- result , err = handleIoOrientationGet (req .Params )
179- case "io_orientation_set" :
180- result , err = handleIoOrientationSet (req .Params )
181- case "device_boot" :
182- result , err = handleDeviceBoot (w , req .Params )
183- case "device_shutdown" :
184- result , err = handleDeviceShutdown (req .Params )
185- case "device_reboot" :
186- result , err = handleDeviceReboot (req .Params )
187- case "dump_ui" :
188- result , err = handleDumpUI (req .Params )
189- case "apps_launch" :
190- result , err = handleAppsLaunch (req .Params )
191- case "apps_terminate" :
192- result , err = handleAppsTerminate (req .Params )
193- case "apps_list" :
194- result , err = handleAppsList (req .Params )
195- case "" :
196- err = fmt .Errorf ("'method' is required" )
197-
198- default :
199- sendJSONRPCError (w , req .ID , ErrCodeMethodNotFound , "Method not found" , fmt .Sprintf ("Method '%s' not found" , req .Method ))
157+ if err != nil {
158+ log .Printf ("Error in screen capture: %v" , err )
159+ sendJSONRPCError (w , req .ID , ErrCodeServerError , "Server error" , err .Error ())
160+ }
200161 return
201162 }
202163
164+ // HTTP-specific: device_boot needs extended timeout (can take up to 2 minutes)
165+ if req .Method == "device_boot" {
166+ _ = http .NewResponseController (w ).SetWriteDeadline (time .Now ().Add (3 * time .Minute ))
167+ }
168+
169+ // Use registry for all methods
170+ if req .Method == "" {
171+ err = fmt .Errorf ("'method' is required" )
172+ } else {
173+ registry := GetMethodRegistry ()
174+ handler , exists := registry [req .Method ]
175+ if exists {
176+ result , err = handler (req .Params )
177+ } else {
178+ sendJSONRPCError (w , req .ID , ErrCodeMethodNotFound , "Method not found" , fmt .Sprintf ("Method '%s' not found" , req .Method ))
179+ return
180+ }
181+ }
182+
203183 if err != nil {
204184 log .Printf ("Error decoding JSON-RPC request: %v" , err )
205185 sendJSONRPCError (w , req .ID , ErrCodeServerError , "Server error" , err .Error ())
@@ -624,10 +604,7 @@ func handleIoOrientationSet(params json.RawMessage) (interface{}, error) {
624604 return okResponse , nil
625605}
626606
627- func handleDeviceBoot (w http.ResponseWriter , params json.RawMessage ) (interface {}, error ) {
628- // extend write deadline for boot operations (can take up to 2 minutes)
629- _ = http .NewResponseController (w ).SetWriteDeadline (time .Now ().Add (3 * time .Minute ))
630-
607+ func handleDeviceBoot (params json.RawMessage ) (interface {}, error ) {
631608 if len (params ) == 0 {
632609 return nil , fmt .Errorf ("'params' is required with fields: deviceId" )
633610 }
0 commit comments