Index: ulex-trials/Makefile ================================================================== --- ulex-trials/Makefile +++ ulex-trials/Makefile @@ -1,7 +1,15 @@ +all : a b ulex-test + ulex-test : ulex-test.scm ../ulex/ulex.scm csc ulex-test.scm + +a : a.scm ../ulex/ulex.scm + csc a.scm + +b : b.scm ../ulex/ulex.scm + csc b.scm test : ulex-test for x in $$(seq 9);do export NBFAKE_LOG=NBFAKE_$$x;sleep 1;nbfake ./ulex-test run 828$$x;echo $$cmd;$$cmd;done clean : Index: ulex-trials/server-one.scm ================================================================== --- ulex-trials/server-one.scm +++ ulex-trials/server-one.scm @@ -19,11 +19,11 @@ #t)) "receive")) (th2 (make-thread (lambda () (print "Jeff is here") (let loop ((entries 0)) - (thread-sleep! 0.01) + (thread-sleep! 0.8) (print "Preparding to send entries" entries) (handle-exceptions exn (begin (print "Had an issue: " (message exn))(thread-sleep! 10)) (define-values (i o) (tcp-connect "localhost" 6504)) (serialize (list "localhost:6505" "from-server-one") o) (print (read-line i)) Index: ulex-trials/server-two.scm ================================================================== --- ulex-trials/server-two.scm +++ ulex-trials/server-two.scm @@ -19,11 +19,11 @@ #t)) "receive")) (th2 (make-thread (lambda () (print "Jeff is here") (let loop ((entries 0)) - (thread-sleep! 0.01) + (thread-sleep! 0.8) (print "Preparding to send entries" entries) (handle-exceptions exn (begin (print "Had an issue: " (message exn))(thread-sleep! 10)) (define-values (i o) (tcp-connect "localhost" 6505)) (serialize (list "localhost:6505" "from-server-two") o) (print (read-line i)) @@ -33,11 +33,11 @@ (th3 (make-thread (lambda () (print "In mailbox thread") (let loop2 ((entries2 0)) (print "Processing: " (mailbox-receive! work-mailbox)) (mailbox-send! notify-mailbox (list 'ack)) - (thread-sleep! 0.01) + (thread-sleep! 0.5) (loop2 1))) "processing")) (th4 (make-thread (lambda () (print "In notify-mailbox thread") (let loop3 ((entries3 0)) (print "Notifying: " (mailbox-receive! notify-mailbox)) Index: ulex-trials/ulex-test.scm ================================================================== --- ulex-trials/ulex-test.scm +++ ulex-trials/ulex-test.scm @@ -28,20 +28,21 @@ where COMMAND is one of: run host:port : start test server - start several in same dir ") (define (call uconn msg addr) - (print "Sent: "msg", received: " + (print "Sent: "msg" to " addr ", received: " (send-receive uconn addr 'hello msg))) ;; start => hello 0 ;; hello 0 => hello 1 ;; hello 1 => hello 2 ;; ... ;; hello 11 => 'done ;; (define (process-message mesg) + (print "In process-message") (let ((parts (string-split mesg))) (match parts ((msg c) (let ((count (string->number c))) @@ -83,11 +84,11 @@ (exit)) (if (null? entries) (loop (glob ".runners/*")) (let* ((entry (car entries)) (destaddr (with-input-from-file entry read-line))) - (call uconn (conc "hello-from-"myport"to-"destaddr) destaddr) + (call uconn (conc "hello-from-"myport"to-"destaddr) (conc "localhost:" destaddr)) ;; (thread-sleep! 0.025) (loop (cdr entries)))))))) ((cmd)(print "ERROR: command "cmd", not recognised.\n\n"help)) (else (print help)))) Index: ulex/ulex.scm ================================================================== --- ulex/ulex.scm +++ ulex/ulex.scm @@ -60,10 +60,11 @@ ) (import scheme chicken.base chicken.file + chicken.io chicken.time chicken.condition chicken.string chicken.sort chicken.pretty-print @@ -72,10 +73,11 @@ mailbox matchable ;; queues regex regex-case + simple-exceptions s11n srfi-1 srfi-18 srfi-4 srfi-69 @@ -225,23 +227,24 @@ (cond (isme (ulex-handler udata dat)) ;; no transmission needed (else (handle-exceptions ;; TODO - MAKE THIS EXCEPTION CMD SPECIFIC? exn - #f + (message exn) (begin ;; (mutex-lock! *send-mutex*) (let-values (((inp oup)(tcp-connect host-port))) (let ((res (if (and inp oup) (begin (serialize dat oup) - (deserialize inp)) + (close-output-port oup) + (deserialize inp) + ) (begin (print "ERROR: send called but no receiver has been setup. Please call setup first!") #f)))) (close-input-port inp) - (close-output-port oup) ;; (mutex-unlock! *send-mutex*) res)))))))) ;; res will always be 'ack unless return-method is direct (define (send-via-polling uconn host-port cmd data) (let* ((qrykey (make-cookie uconn))