38 lines
1.1 KiB
Racket
38 lines
1.1 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 'packet-handler
|
|
(set (topic-publisher (udp-packet local-addr (wild) (wild)))
|
|
(topic-subscriber (udp-packet (wild) local-addr (wild))))
|
|
#:state state
|
|
[(udp-packet source _ #"quit\n")
|
|
(transition state
|
|
(send-message (udp-packet local-addr source #"OK, quitting\n"))
|
|
(kill #:reason "Asked to quit"))]
|
|
[(udp-packet source sink body)
|
|
(transition state
|
|
(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)
|