diff --git a/prospect/examples/actor/echo.rkt b/prospect/examples/actor/echo.rkt new file mode 100644 index 0000000..52b5921 --- /dev/null +++ b/prospect/examples/actor/echo.rkt @@ -0,0 +1,18 @@ +#lang prospect + +(require prospect/actor) +(require prospect/drivers/tcp) + +(actor-body->spawn-action + (lambda () + (perform-core-action! (spawn-tcp-driver)) + + (define server-id (tcp-listener 5999)) + (forever (assert (advertise (observe (tcp-channel _ server-id _)))) + (on (asserted (advertise (tcp-channel $c server-id _))) + (printf "Accepted connection from ~v\n" c) + (actor (until (retracted (advertise (tcp-channel c server-id _))) + (assert (advertise (tcp-channel server-id c _))) + (on (message (tcp-channel c server-id $bs)) + (send! (tcp-channel server-id c bs)))) + (printf "Closed connection ~v\n" c))))))