syndicate-2017/racket/syndicate/examples/udp-multicast.rkt

28 lines
843 B
Racket
Raw Normal View History

2016-05-27 23:43:35 +00:00
#lang syndicate
(require syndicate/actor)
(require syndicate/drivers/timer)
(require syndicate/drivers/udp)
(require racket/random file/sha1)
(spawn-timer-driver)
(spawn-udp-driver)
(actor (define me (bytes->hex-string (crypto-random-bytes 8)))
(define h (udp-listener 5999))
(define (rearm!) (send! (set-timer h 1000 'relative)))
(rearm!)
(forever
(assert (udp-multicast-group-member h "224.0.0.251" #f))
(assert (udp-multicast-loopback h #t))
(on (message (udp-packet $source h $body))
(printf "~a: ~a\n" source body))
(on (message (timer-expired h $now))
(rearm!)
(send! (udp-packet h
(udp-remote-address "224.0.0.251" 5999)
(string->bytes/utf-8 (format "~a ~a" me now)))))))