105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
-
-
+
+
|
(print-call-chain (current-error-port))
(debug:print 0 " message: " ((condition-property-accessor 'exn 'message) exn))
(vector #f (vector exn call-chain dat))) ;; return some stuff for debug if an exception happens
(if (not (vector? dat)) ;; it is an error to not receive a vector
(vector #f #f "remote must be called with a vector")
(vector ;; return a vector + the returned data structure
#t
(let ((cmd (vector-ref dat 0))
(params (vector-ref dat 1)))
(let ((cmd (safe-vector-ref dat 0))
(params (safe-vector-ref dat 1)))
(case (if (symbol? cmd)
cmd
(string->symbol cmd))
;;===============================================
;; READ/WRITE QUERIES
;;===============================================
|
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
|
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
|
-
+
|
;; NB// Runs on the server as part of the server loop
;;
(define (api:process-request dbstruct $) ;; the $ is the request vars proc
(let* ((cmd ($ 'cmd))
(paramsj ($ 'params))
(params (db:string->obj paramsj transport: 'http)) ;; (rmt:json-str->dat paramsj))
(resdat (api:execute-requests dbstruct (vector cmd params))) ;; #( flag result )
(res (vector-ref resdat 1)))
(res (safe-vector-ref resdat 1)))
;; This can be here but needs controls to ensure it doesn't run more than every 4 seconds
;; (rmt:dat->json-str
;; (if (or (string? res)
;; (list? res)
;; (number? res)
;; (boolean? res))
;; res
;; (list "ERROR, not string, list, number or boolean" 1 cmd params res)))))
(db:obj->string res transport: 'http)))
|