racket-dns-2012/experiments/sfserver2.rkt

30 lines
740 B
Racket

#lang racket
(require "os-big-bang.rkt")
(require "os-udp.rkt")
(define (counter server-socket)
(os-big-bang 0
(subscribe 'packet-handler
(message-handlers current-counter
[(udp-packet source (== server-socket) #"get")
(transition (+ current-counter 1)
(send-message
(udp-packet server-socket source
(integer->integer-bytes current-counter 8 #f))))]))))
(define main
(os-big-bang 'no-state
(send-message `(request create-echo-socket (udp new 5678 65536)))
(subscribe/fresh sub
(message-handlers w
[`(reply create-echo-socket ,server-socket)
(transition w
(unsubscribe sub)
(spawn (counter server-socket)))]))))
(ground-vm
(os-big-bang 'none
(spawn udp-driver)
(spawn main)))