From 38c6bfd20e51b09cc0fdcf723f73e408161df15e Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Tue, 1 May 2018 17:34:51 +0100 Subject: [PATCH] Drain multiple external ground events at once. (Good or bad idea?) --- syndicate/ground.rkt | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/syndicate/ground.rkt b/syndicate/ground.rkt index d7e7591..ea51cd5 100644 --- a/syndicate/ground.rkt +++ b/syndicate/ground.rkt @@ -40,14 +40,24 @@ (define ground-event-relay-actor #f) (define background-activity-count 0) + (define (handle-ground-event-item item) + (match item + [(? procedure? proc) + (push-script! ground-event-relay-actor + (lambda () (proc ground-event-relay-actor)))] + [(? number? delta) + (set! background-activity-count (+ background-activity-count delta))])) + + (define (drain-external-events) + (define item (async-channel-try-get ch)) + (when item + (handle-ground-event-item item) + (drain-external-events))) + (define ground-event-relay-evt (handle-evt ch (lambda (item) - (match item - [(? procedure? proc) - (push-script! ground-event-relay-actor - (lambda () (proc ground-event-relay-actor)))] - [(? number? delta) - (set! background-activity-count (+ background-activity-count delta))])))) + (handle-ground-event-item item) + (drain-external-events)))) (define ds (make-dataspace (lambda ()