#lang racket/base (require "os-big-bang.rkt") (require "os-udp.rkt") (require "os-timer.rkt" racket/match) (define getter (os-big-bang 'none (send-message `(request create-echo-socket (udp new 0 65536))) (subscribe/fresh sub (message-handlers w [`(reply create-echo-socket ,sname) (transition w (unsubscribe sub) (send-message (udp-packet sname (udp-address "127.0.0.1" 5678) #"get")) (send-message (set-timer 'timeout 500 #t)) (subscribe 'reply-waiter (message-handlers w [(udp-packet source (== sname) reply-bytes) (define counter (integer-bytes->integer reply-bytes #f)) (write counter) (newline) (transition w (send-message 'quit) (unsubscribe 'reply-waiter))] [(timer-expired 'timeout _) (write 'timed-out) (newline) (transition w (send-message 'quit) (unsubscribe 'reply-waiter))])))])))) (ground-vm (os-big-bang 'none (spawn (os-big-bang 'none (subscribe 'quit-waiter (message-handlers w ['quit (exit)])))) (spawn udp-driver) (spawn (timer-driver)) (spawn getter)))