Function: eca-api-request-sync

eca-api-request-sync is a natively compiled function defined in eca-api.el.

Signature

(eca-api-request-sync SESSION &key METHOD PARAMS)

Documentation

Request sync the ECA server SESSION passing METHOD and PARAMS.

Source Code

;; Defined in /nix/store/jklqzw6pzz6j4jrbv8wy0iwgi7jlrbld-emacs-packages-deps/share/emacs/site-lisp/elpa/eca-20260928.1827/eca-api.el
(cl-defun eca-api-request-sync (session &key method params)
  "Request sync the ECA server SESSION passing METHOD and PARAMS."
  (let* ((send-time (float-time))
         (expected-time (and eca-api-response-timeout
                             (+ send-time eca-api-response-timeout)))
         resp-result resp-error)
    (eca-api-request-async
     session
     :method method
     :params params
     :success-callback (lambda (res) (setf resp-result (or res :finished)) (throw 'eca-done '_))
     :error-callback (lambda (err) (setf resp-error err) (throw 'eca-done '_)))
    (let ((req-id eca--last-id))
      (unwind-protect
          (progn
            (while (not (or resp-error resp-result))
              (if (functionp 'json-rpc-connection)
                  (catch 'eca-done (sit-for 0.01))
                (catch 'eca-done
                  (accept-process-output
                   (eca--session-process session)
                   (if expected-time (- expected-time send-time) 1))))
              (setq send-time (float-time))
              (when (and expected-time (< expected-time send-time))
                (error "Timeout while waiting for response.  Method: %s" method)))
            (cond
             ((eq resp-result :finished) nil)
             (resp-result resp-result)
             (resp-error (error "%s" resp-error))))
        ;; Cleanup: remove stale handler on non-local exit (timeout, C-g, etc.)
        (unless (or resp-result resp-error)
          (setf (eca--session-response-handlers session)
                (plist-put (eca--session-response-handlers session) req-id nil)))))))