racket-matrix-2012/os2-udp-test.rkt

34 lines
1.0 KiB
Racket

#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"))
(quit #: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)