43 lines
1.1 KiB
Racket
43 lines
1.1 KiB
Racket
#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)))
|