#lang racket/base ;; Trivial example program demonstrating os2-udp.rkt. (require racket/set) (require racket/match) (require "os2.rkt") (require "os2-udp.rkt") (require "os2-testing.rkt") (define (packet-handler local-addr) (role (set (topic-publisher (udp-packet local-addr (wild) (wild))) (topic-subscriber (udp-packet (wild) local-addr (wild)))) [(udp-packet source _ #"quit\n") (list (send-message (udp-packet local-addr source #"OK, quitting\n")) (kill #:reason "Asked to quit"))] [(udp-packet source sink body) (send-message (udp-packet sink source body))])) (check-role (packet-handler (udp-listener 5555)) 'arbitrary (send-message (udp-packet (udp-address "127.0.0.1" 12345) (udp-listener 5555) #"abcd")) 'arbitrary (send-message (udp-packet (udp-listener 5555) (udp-address "127.0.0.1" 12345) #"abcd"))) (define (main port) (ground-vm (transition 'none (spawn udp-spy) (spawn udp-driver) (spawn (transition 'none (packet-handler (udp-listener port))))))) (main 5999)