(declare (usual-integrations))(define id (random 1000000))
(define global-timeout (make-timeout-event 10000)) (define leader-timeout (make-timeout-event (random 5000))) (define collisions 0)
(color-me "blue")
(define clubs-I-belong-to '())
(define still-competing? #T)
(define primitive-message-event (make-event))
(define (club-event-loop) (select (global-timeout 'done) ((and still-competing? leader-timeout) (event.clear! leader-timeout) (color-me "red") (set! still-competing? #F) (broadcast id) ; a LEADER message (club-event-loop)) (primitive-message-event => (lambda (message) (event.clear! primitive-message-event) (if (eq? message 'collision) (set! collisions (+ collisions 1)) (begin (set! still-competing? #F) (set! clubs-i-belong-to (cons message clubs-i-belong-to)) (color-me (length clubs-i-belong-to)))) (club-event-loop)))))
(club-event-loop)
(list id clubs-i-belong-to collisions)