Megatest

Diff
Login

Differences From Artifact [46b3357985]:

To Artifact [df6ad4612b]:


147
148
149
150
151
152
153
154



155
156
157
158
159
160
161
147
148
149
150
151
152
153

154
155
156
157
158
159
160
161
162
163







-
+
+
+







  (dbname   #f)
  (fullname #f)
  (hostport #f)
  (ipaddr   #f)
  (port     #f)
  (srvpkt   #f)
  (lastmsg  0)
  (expires  0))
  (expires  0)
  (inport   #f)
  (outport  #f))

;;======================================================================
;;  S U P P O R T   F U N C T I O N S
;;======================================================================

;; replaces *runremote*
(define *rmt:remote* (make-rmt:remote))
266
267
268
269
270
271
272
273
274



275
276



277
278
279
280
281

282
283


284
285
286







287
288
289
290

291
292
293
294
295
296
297
268
269
270
271
272
273
274


275
276
277


278
279
280
281
282
283
284

285
286
287
288
289



290
291
292
293
294
295
296




297
298
299
300
301
302
303
304







-
-
+
+
+
-
-
+
+
+




-
+


+
+
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+







  (if (not *rmt:remote*)(set! *rmt:remote* (make-rmt:remote)))
  (let* ((apath *toppath*)
	 (conns *rmt:remote*)
	 (dbname (db:run-id->dbname rid)))
    (rmt:general-open-connection conns apath dbname)
    (rmt:send-receive-real conns apath dbname cmd params)))

(define (rmt:send-receive-real host port data)
  (let-values ((i o) (tcp-connect host port))
(define (rmt:send-receive-setup conn)
  (if (not (rmt:conn-inport conn))
      (let-values ((i o) (tcp-connect (rmt:conn-ipaddr conn)
    (write-line data o)
    (print (read-line i))))
				      (rmt:conn-port port)))
	(rmt:conn-inport-set! conn i)
	(rmt:conn-outport-set! conn o))))
  
;; db is at apath/.db/dbname, rid is an intermediary solution and will be removed
;; sometime in the future
;;
#;(define (rmt:send-receive-real remote apath dbname cmd params)
(define (rmt:send-receive-real remote apath dbname cmd params)
  (let* ((conn (rmt:get-conn remote apath dbname)))
    (assert conn "FATAL: rmt:send-receive-real called without the needed channels opened")
    (rmt:send-receive-setup conn)
    (let* ((key     #f)
    (let* ((payload (sexpr->string params))
	   (res      (with-input-from-request
		      (rmt:conn->uri conn "api")
	   (payload (sexpr->string `((cmd . ,cmd)
				     (key . ,key)
				     (params . ,params))))
	   (res      (begin
		       (write payload (rmt:conn-outport conn))
		       (with-input-from-port
			   (rmt:conn-inport conn)
		      `((params . ,payload)
			(cmd    . ,cmd)
			(key    . "nokey"))
		      read-string)))
			 read-string))))
      (if (string? res)
	  (string->sexpr res)
	  res))))

;; db is at apath/.db/dbname, rid is an intermediary solution and will be removed
;; sometime in the future.
;;