diff --git a/racket/syndicate/broker/server.rkt b/racket/syndicate/broker/server.rkt index 1319ea1..68bc442 100644 --- a/racket/syndicate/broker/server.rkt +++ b/racket/syndicate/broker/server.rkt @@ -1,4 +1,4 @@ -#lang racket/base +#lang syndicate/actor ;; Generic relay for WebSockets/TCP/etc-based participation in a network. (provide spawn-broker-server @@ -110,18 +110,14 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(module+ main - (require syndicate/ground) - (require syndicate/actor) - (require syndicate/drivers/timer) - (require syndicate/drivers/websocket) - (define ssl-options - (match (current-command-line-arguments) - [(vector c p) (websocket-ssl-options c p)] - [_ #f])) - (run-ground (spawn-timer-driver) - (spawn-websocket-driver) - (dataspace (schedule-action! (spawn-broker-server 8000)) - (when ssl-options - (schedule-action! (spawn-broker-server 8443 #:ssl-options ssl-options))) - (forever)))) +(require/activate syndicate/drivers/timer) +(require/activate syndicate/drivers/websocket) + +(let ((ssl-options + (match (current-command-line-arguments) + [(vector c p) (websocket-ssl-options c p)] + [_ #f]))) + (dataspace (schedule-action! (spawn-broker-server 8000)) + (when ssl-options + (schedule-action! (spawn-broker-server 8443 #:ssl-options ssl-options))) + (forever))) diff --git a/racket/syndicate/drivers/tcp.rkt b/racket/syndicate/drivers/tcp.rkt index eab2c8d..149c05e 100644 --- a/racket/syndicate/drivers/tcp.rkt +++ b/racket/syndicate/drivers/tcp.rkt @@ -1,10 +1,8 @@ -#lang racket/base +#lang syndicate -(require racket/match) (require racket/exn) (require (prefix-in tcp: racket/tcp)) (require (only-in racket/port read-bytes-avail!-evt)) -(require "../main.rkt") (require "../demand-matcher.rkt") (require racket/unit) @@ -187,3 +185,7 @@ (sub (tcp-channel local-addr remote-addr ?)) ;; want segments from peer (sub (tcp-channel remote-addr local-addr ?) #:meta-level 1) ;; segments from driver thread ))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(spawn-tcp-driver) diff --git a/racket/syndicate/drivers/timer.rkt b/racket/syndicate/drivers/timer.rkt index 47b7e12..e8ed838 100644 --- a/racket/syndicate/drivers/timer.rkt +++ b/racket/syndicate/drivers/timer.rkt @@ -1,4 +1,4 @@ -#lang racket/base +#lang syndicate ;; Timer driver. ;; Uses mutable state internally, but because the scope of the @@ -6,9 +6,7 @@ ;; correct linear use of the various pointers. (require racket/set) -(require racket/match) (require data/heap) -(require "../main.rkt") (struct pending-timer (deadline label) #:transparent) @@ -126,3 +124,7 @@ (define (timer-evt msecs) (handle-evt (alarm-evt msecs) (lambda (_) (current-inexact-milliseconds)))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(spawn-timer-driver) diff --git a/racket/syndicate/drivers/udp.rkt b/racket/syndicate/drivers/udp.rkt index 3be71a9..d1ae7bc 100644 --- a/racket/syndicate/drivers/udp.rkt +++ b/racket/syndicate/drivers/udp.rkt @@ -1,8 +1,6 @@ -#lang racket/base +#lang syndicate -(require racket/match) (require (prefix-in udp: racket/udp)) -(require "../main.rkt") (require "../demand-matcher.rkt") (provide (struct-out udp-remote-address) @@ -112,3 +110,7 @@ (subbytes buffer 0 len))) (loop))))) (udp:udp-close socket)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(spawn-udp-driver) diff --git a/racket/syndicate/drivers/websocket.rkt b/racket/syndicate/drivers/websocket.rkt index 447e7df..52b698a 100644 --- a/racket/syndicate/drivers/websocket.rkt +++ b/racket/syndicate/drivers/websocket.rkt @@ -1,4 +1,4 @@ -#lang racket/base +#lang syndicate (provide (struct-out websocket-remote-client) (struct-out websocket-local-server) @@ -11,14 +11,12 @@ any-websocket-remote-client) (require racket/exn) -(require racket/match) (require net/rfc6455) (require (only-in net/rfc6455/conn-api ws-conn-base-ip ws-conn-peer-addresses ws-conn-host+port ws-conn-path)) -(require "../main.rkt") (require "../demand-matcher.rkt") (require racket/unit) @@ -221,3 +219,7 @@ (sub (websocket-message local-addr remote-addr ?)) ;; want segments from peer (sub (websocket-incoming-message id ?) #:meta-level 1) ;; segments from driver thd ))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(spawn-websocket-driver) diff --git a/racket/syndicate/examples/actor/chain.rkt b/racket/syndicate/examples/actor/chain.rkt index 055edf1..62257a3 100644 --- a/racket/syndicate/examples/actor/chain.rkt +++ b/racket/syndicate/examples/actor/chain.rkt @@ -1,8 +1,6 @@ #lang syndicate/actor -(require syndicate/drivers/timer) - -(spawn-timer-driver) +(require/activate syndicate/drivers/timer) (define (sleep sec) (define timer-id (gensym 'sleep)) diff --git a/racket/syndicate/examples/actor/chat-client.rkt b/racket/syndicate/examples/actor/chat-client.rkt index b635bd3..e9da85e 100644 --- a/racket/syndicate/examples/actor/chat-client.rkt +++ b/racket/syndicate/examples/actor/chat-client.rkt @@ -1,14 +1,12 @@ #lang syndicate/actor -(require syndicate/drivers/tcp) +(require/activate syndicate/drivers/tcp) (require (only-in racket/port read-bytes-line-evt)) (define local-handle (tcp-handle 'chat)) (define remote-handle (tcp-address "localhost" 5999)) (define stdin-evt (read-bytes-line-evt (current-input-port) 'any)) -(spawn-tcp-driver) - (actor (react/suspend (quit) (on (message (external-event stdin-evt (list $line)) #:meta-level 1) diff --git a/racket/syndicate/examples/actor/chat-no-quit-world-no-nesting.rkt b/racket/syndicate/examples/actor/chat-no-quit-world-no-nesting.rkt index 706e7ff..85aabbe 100644 --- a/racket/syndicate/examples/actor/chat-no-quit-world-no-nesting.rkt +++ b/racket/syndicate/examples/actor/chat-no-quit-world-no-nesting.rkt @@ -1,6 +1,6 @@ #lang syndicate/actor -(require syndicate/drivers/tcp) +(require/activate syndicate/drivers/tcp) (require (only-in racket/string string-trim)) (struct says (who what) #:prefab) @@ -28,7 +28,6 @@ (on (message (tcp-channel them us $bs)) (send! (says user (string-trim (bytes->string/utf-8 bs)))))))) -(spawn-tcp-driver) (define us (tcp-listener 5999)) (actor (forever (assert (advertise (observe (tcp-channel _ us _)))) diff --git a/racket/syndicate/examples/actor/chat-no-quit-world.rkt b/racket/syndicate/examples/actor/chat-no-quit-world.rkt index 35a81ed..8892439 100644 --- a/racket/syndicate/examples/actor/chat-no-quit-world.rkt +++ b/racket/syndicate/examples/actor/chat-no-quit-world.rkt @@ -1,6 +1,6 @@ #lang syndicate/actor -(require syndicate/drivers/tcp) +(require/activate syndicate/drivers/tcp) (require (only-in racket/string string-trim)) (struct says (who what) #:prefab) @@ -29,7 +29,6 @@ (on (message (tcp-channel them us $bs) #:meta-level 1) (send! (says user (string-trim (bytes->string/utf-8 bs)))))))) -(spawn-tcp-driver) (dataspace (define us (tcp-listener 5999)) (forever (assert (advertise (observe (tcp-channel _ us _))) #:meta-level 1) (on (asserted (advertise (tcp-channel $them us _)) #:meta-level 1) diff --git a/racket/syndicate/examples/actor/chat-simplified-internals.rkt b/racket/syndicate/examples/actor/chat-simplified-internals.rkt index 137ca0e..6946369 100644 --- a/racket/syndicate/examples/actor/chat-simplified-internals.rkt +++ b/racket/syndicate/examples/actor/chat-simplified-internals.rkt @@ -1,6 +1,6 @@ #lang syndicate/actor -(require syndicate/drivers/tcp) +(require/activate syndicate/drivers/tcp) (require (only-in racket/string string-trim)) (struct tcp-remote-open (id) #:prefab) @@ -33,8 +33,6 @@ (on (message (tcp-incoming-data id $bs)) (send! (says user (string-trim (bytes->string/utf-8 bs)))))))) -(spawn-tcp-driver) - (define us (tcp-listener 5999)) (actor (forever (assert (advertise (observe (tcp-channel _ us _)))) (on (asserted (advertise (tcp-channel $them us _))) diff --git a/racket/syndicate/examples/actor/chat.rkt b/racket/syndicate/examples/actor/chat.rkt index 39d18af..caa7d2d 100644 --- a/racket/syndicate/examples/actor/chat.rkt +++ b/racket/syndicate/examples/actor/chat.rkt @@ -1,6 +1,6 @@ #lang syndicate/actor -(require syndicate/drivers/tcp) +(require/activate syndicate/drivers/tcp) (require (only-in racket/string string-trim)) (struct says (who what) #:prefab) @@ -33,7 +33,6 @@ (send! (shutdown)) (send! (says user input-string))))))) -(spawn-tcp-driver) (dataspace (define us (tcp-listener 5999)) (until (message (shutdown)) (assert (advertise (observe (tcp-channel _ us _))) #:meta-level 1) diff --git a/racket/syndicate/examples/actor/echo.rkt b/racket/syndicate/examples/actor/echo.rkt index 938dbac..6f300b9 100644 --- a/racket/syndicate/examples/actor/echo.rkt +++ b/racket/syndicate/examples/actor/echo.rkt @@ -1,8 +1,6 @@ #lang syndicate/actor -(require syndicate/drivers/tcp) - -(spawn-tcp-driver) +(require/activate syndicate/drivers/tcp) (define server-id (tcp-listener 5999)) (actor diff --git a/racket/syndicate/examples/actor/file-system-during.rkt b/racket/syndicate/examples/actor/file-system-during.rkt index 0743612..ae25e21 100644 --- a/racket/syndicate/examples/actor/file-system-during.rkt +++ b/racket/syndicate/examples/actor/file-system-during.rkt @@ -2,7 +2,7 @@ ;; Toy file system, based on the example in the ESOP2016 submission. ;; syndicate/actor implementation, using "during" instead of "on asserted/until retracted". -(require syndicate/drivers/timer) +(require/activate syndicate/drivers/timer) (require (only-in racket/port read-bytes-line-evt)) (require (only-in racket/string string-trim string-split)) @@ -10,8 +10,6 @@ (struct save (file) #:prefab) (struct delete (name) #:prefab) -(spawn-timer-driver) - (actor (react (field [files (hash)]) (during (observe (file $name _)) (on-start (printf "At least one reader exists for ~v\n" name)) diff --git a/racket/syndicate/examples/actor/file-system-lll.rkt b/racket/syndicate/examples/actor/file-system-lll.rkt index 30caec2..0ef2549 100644 --- a/racket/syndicate/examples/actor/file-system-lll.rkt +++ b/racket/syndicate/examples/actor/file-system-lll.rkt @@ -3,7 +3,7 @@ ;; Low-level implementation. (require (only-in syndicate [assert core:assert])) -(require syndicate/drivers/timer) +(require/activate syndicate/drivers/timer) (require (only-in racket/port read-bytes-line-evt)) (require (only-in racket/string string-trim string-split)) (require racket/set) @@ -12,8 +12,6 @@ (struct save (file) #:prefab) (struct delete (name) #:prefab) -(spawn-timer-driver) - (define (file-system-event-handler e files) (match-event e [(? patch? p) diff --git a/racket/syndicate/examples/actor/file-system-lll2.rkt b/racket/syndicate/examples/actor/file-system-lll2.rkt index 7797025..69396ee 100644 --- a/racket/syndicate/examples/actor/file-system-lll2.rkt +++ b/racket/syndicate/examples/actor/file-system-lll2.rkt @@ -3,7 +3,7 @@ ;; Low-level implementation, without subconversation. (require (only-in syndicate [assert core:assert])) -(require syndicate/drivers/timer) +(require/activate syndicate/drivers/timer) (require (only-in racket/port read-bytes-line-evt)) (require (only-in racket/string string-trim string-split)) (require racket/set) @@ -14,8 +14,6 @@ (struct fs-state (files monitored) #:prefab) -(spawn-timer-driver) - (define (update-file state name new-content) (transition (struct-copy fs-state state [files (if new-content diff --git a/racket/syndicate/examples/actor/file-system.rkt b/racket/syndicate/examples/actor/file-system.rkt index 3954b5a..cdde2f9 100644 --- a/racket/syndicate/examples/actor/file-system.rkt +++ b/racket/syndicate/examples/actor/file-system.rkt @@ -2,7 +2,7 @@ ;; Toy file system, based on the example in the ESOP2016 submission. ;; syndicate/actor implementation. -(require syndicate/drivers/timer) +(require/activate syndicate/drivers/timer) (require (only-in racket/port read-bytes-line-evt)) (require (only-in racket/string string-trim string-split)) @@ -10,8 +10,6 @@ (struct save (file) #:prefab) (struct delete (name) #:prefab) -(spawn-timer-driver) - (actor (react (field [files (hash)]) (on (asserted (observe (file $name _))) (printf "At least one reader exists for ~v\n" name) diff --git a/racket/syndicate/examples/actor/file-system2.rkt b/racket/syndicate/examples/actor/file-system2.rkt index 38bc14f..bc6568f 100644 --- a/racket/syndicate/examples/actor/file-system2.rkt +++ b/racket/syndicate/examples/actor/file-system2.rkt @@ -2,7 +2,7 @@ ;; Toy file system, based on the example in the ESOP2016 submission. ;; syndicate/actor implementation, without subconversation. -(require syndicate/drivers/timer) +(require/activate syndicate/drivers/timer) (require (only-in racket/port read-bytes-line-evt)) (require (only-in racket/string string-trim string-split)) (require racket/set) @@ -11,8 +11,6 @@ (struct save (file) #:prefab) (struct delete (name) #:prefab) -(spawn-timer-driver) - (actor (react (field [files (hash)] [monitored (set)]) (on (asserted (observe (file $name _))) (printf "At least one reader exists for ~v\n" name) diff --git a/racket/syndicate/examples/actor/spreadsheet.rkt b/racket/syndicate/examples/actor/spreadsheet.rkt index 131d197..63f6e31 100644 --- a/racket/syndicate/examples/actor/spreadsheet.rkt +++ b/racket/syndicate/examples/actor/spreadsheet.rkt @@ -1,7 +1,6 @@ #lang syndicate/actor ;; A toy spreadsheet model. -(require racket/match) (require racket/set) (define-namespace-anchor ns) diff --git a/racket/syndicate/examples/all-pairs-shortest-paths/all-pairs-shortest-paths.rkt b/racket/syndicate/examples/all-pairs-shortest-paths/all-pairs-shortest-paths.rkt index b3057e4..ec5924a 100644 --- a/racket/syndicate/examples/all-pairs-shortest-paths/all-pairs-shortest-paths.rkt +++ b/racket/syndicate/examples/all-pairs-shortest-paths/all-pairs-shortest-paths.rkt @@ -1,4 +1,4 @@ -#lang syndicate +#lang syndicate/actor ;; After Figure 1 in "Logic and lattices for distributed programming", ;; Conway et. al, UCB tech report, 2012 ;; @@ -6,7 +6,6 @@ ;; input. (require racket/set) -(require syndicate/actor) (struct link (from to cost) #:prefab) (struct path (from to cost) #:prefab) diff --git a/racket/syndicate/examples/all-pairs-shortest-paths/all-pairs-shortest-paths2.rkt b/racket/syndicate/examples/all-pairs-shortest-paths/all-pairs-shortest-paths2.rkt index f15fd5f..0786fca 100644 --- a/racket/syndicate/examples/all-pairs-shortest-paths/all-pairs-shortest-paths2.rkt +++ b/racket/syndicate/examples/all-pairs-shortest-paths/all-pairs-shortest-paths2.rkt @@ -1,11 +1,10 @@ -#lang syndicate +#lang syndicate/actor ;; After Figure 1 in "Logic and lattices for distributed programming", ;; Conway et. al, UCB tech report, 2012 ;; ;; Added path-seen set to ensure termination on input cycles. (require racket/set) -(require syndicate/actor) (struct link (from to cost) #:prefab) (struct path (from to seen cost) #:prefab) diff --git a/racket/syndicate/examples/chat-client.rkt b/racket/syndicate/examples/chat-client.rkt index d8f3b35..e20d91b 100644 --- a/racket/syndicate/examples/chat-client.rkt +++ b/racket/syndicate/examples/chat-client.rkt @@ -1,12 +1,11 @@ #lang syndicate (require (only-in racket/port read-bytes-line-evt)) -(require "../drivers/tcp.rkt") +(require/activate "../drivers/tcp.rkt") (define local-handle (tcp-handle 'chat)) (define remote-handle (tcp-address "localhost" 5999)) -(spawn-tcp-driver) (spawn/stateless (lambda (e) (match e [(? patch/removed?) (quit)] diff --git a/racket/syndicate/examples/chat-no-quit-world-no-nesting.rkt b/racket/syndicate/examples/chat-no-quit-world-no-nesting.rkt index b2c0fed..0b915a2 100644 --- a/racket/syndicate/examples/chat-no-quit-world-no-nesting.rkt +++ b/racket/syndicate/examples/chat-no-quit-world-no-nesting.rkt @@ -1,7 +1,7 @@ #lang syndicate (require (only-in racket/string string-trim)) -(require "../drivers/tcp.rkt") +(require/activate "../drivers/tcp.rkt") (require "../demand-matcher.rkt") (define (spawn-session them us) @@ -36,7 +36,6 @@ (pub (tcp-channel us them ?)) ;; we will write to remote client )))) -(spawn-tcp-driver) (spawn-demand-matcher (advertise (tcp-channel (?!) (?! (tcp-listener 5999)) ?)) (observe (tcp-channel (?!) (?! (tcp-listener 5999)) ?)) spawn-session) diff --git a/racket/syndicate/examples/chat-no-quit-world.rkt b/racket/syndicate/examples/chat-no-quit-world.rkt index 35821f9..349b2ee 100644 --- a/racket/syndicate/examples/chat-no-quit-world.rkt +++ b/racket/syndicate/examples/chat-no-quit-world.rkt @@ -1,7 +1,7 @@ #lang syndicate (require (only-in racket/string string-trim)) -(require "../drivers/tcp.rkt") +(require/activate "../drivers/tcp.rkt") (require "../demand-matcher.rkt") (define (spawn-session them us) @@ -36,7 +36,6 @@ (pub (tcp-channel us them ?) #:meta-level 1) ;; we will write to remote client )))) -(spawn-tcp-driver) (spawn-dataspace (spawn-demand-matcher (advertise (tcp-channel (?!) (?! (tcp-listener 5999)) ?)) (observe (tcp-channel (?!) (?! (tcp-listener 5999)) ?)) diff --git a/racket/syndicate/examples/chat-simplified-internals.rkt b/racket/syndicate/examples/chat-simplified-internals.rkt index f8beedc..ed4b7a5 100644 --- a/racket/syndicate/examples/chat-simplified-internals.rkt +++ b/racket/syndicate/examples/chat-simplified-internals.rkt @@ -3,7 +3,7 @@ ;; driver's protocol. (require (only-in racket/string string-trim)) -(require "../drivers/tcp.rkt") +(require/activate "../drivers/tcp.rkt") (require "../demand-matcher.rkt") (struct tcp-remote-open (id) #:prefab) @@ -63,8 +63,6 @@ (assert (tcp-local-open id)) ;; indicate our end of the connection is up )))) -(spawn-tcp-driver) - (spawn-demand-matcher (advertise (tcp-channel (?!) (?! (tcp-listener 5999)) ?)) (observe (tcp-channel (?!) (?! (tcp-listener 5999)) ?)) tcp-proxy-process) diff --git a/racket/syndicate/examples/chat.rkt b/racket/syndicate/examples/chat.rkt index 3243d93..6d8bb30 100644 --- a/racket/syndicate/examples/chat.rkt +++ b/racket/syndicate/examples/chat.rkt @@ -1,7 +1,7 @@ #lang syndicate (require (only-in racket/string string-trim)) -(require "../drivers/tcp.rkt") +(require/activate "../drivers/tcp.rkt") (require "../demand-matcher.rkt") (define (spawn-session them us) @@ -39,7 +39,6 @@ (pub (tcp-channel us them ?) #:meta-level 1) ;; we will write to remote client )))) -(spawn-tcp-driver) (spawn-dataspace (spawn-demand-matcher (advertise (tcp-channel (?!) (?! (tcp-listener 5999)) ?)) (observe (tcp-channel (?!) (?! (tcp-listener 5999)) ?)) diff --git a/racket/syndicate/examples/echo.rkt b/racket/syndicate/examples/echo.rkt index a0158ee..86c8a26 100644 --- a/racket/syndicate/examples/echo.rkt +++ b/racket/syndicate/examples/echo.rkt @@ -1,11 +1,10 @@ #lang syndicate -(require "../drivers/tcp.rkt") +(require/activate "../drivers/tcp.rkt") (require "../demand-matcher.rkt") (define server-id (tcp-listener 5999)) -(spawn-tcp-driver) (spawn-demand-matcher (advertise (tcp-channel (?!) server-id ?)) (observe (tcp-channel (?!) server-id ?)) (lambda (c) diff --git a/racket/syndicate/examples/endpoint-example.rkt b/racket/syndicate/examples/endpoint-example.rkt index a0841f6..b6c6f92 100644 --- a/racket/syndicate/examples/endpoint-example.rkt +++ b/racket/syndicate/examples/endpoint-example.rkt @@ -1,9 +1,7 @@ #lang syndicate (require "../endpoint.rkt") -(require "../drivers/timer.rkt") - -(spawn-timer-driver) +(require/activate "../drivers/timer.rkt") (define ((log-it eid) e u) (log-info "endpoint ~a state ~a: ~v" eid u e) diff --git a/racket/syndicate/examples/example-lang.rkt b/racket/syndicate/examples/example-lang.rkt index f2c0954..10c360a 100644 --- a/racket/syndicate/examples/example-lang.rkt +++ b/racket/syndicate/examples/example-lang.rkt @@ -1,7 +1,7 @@ #lang syndicate (require (only-in racket/port read-line-evt)) -(require "../drivers/timer.rkt") +(require/activate "../drivers/timer.rkt") (define (quasi-spy e s) (printf "----------------------------------------\n") @@ -55,7 +55,6 @@ (quit))] [_ #f])) -(spawn-timer-driver) (message (set-timer 'tick 1000 'relative)) (spawn ticker 1 diff --git a/racket/syndicate/examples/forward-chaining.rkt b/racket/syndicate/examples/forward-chaining.rkt index 3178ce9..e0d6502 100644 --- a/racket/syndicate/examples/forward-chaining.rkt +++ b/racket/syndicate/examples/forward-chaining.rkt @@ -3,9 +3,7 @@ (require racket/set) (require "../trie.rkt") (require "../demand-matcher.rkt") -(require "../drivers/timer.rkt") - -(spawn-timer-driver) +(require/activate "../drivers/timer.rkt") (spawn (lambda (e old-count) (match e diff --git a/racket/syndicate/examples/tcp-hello.rkt b/racket/syndicate/examples/tcp-hello.rkt index b3c62ba..d3333c0 100644 --- a/racket/syndicate/examples/tcp-hello.rkt +++ b/racket/syndicate/examples/tcp-hello.rkt @@ -1,10 +1,8 @@ #lang syndicate -(require "../drivers/tcp.rkt") +(require/activate "../drivers/tcp.rkt") (require "../demand-matcher.rkt") -(spawn-tcp-driver) - (define server-id (tcp-listener 5999)) (define (spawn-connection-handler c) diff --git a/racket/syndicate/examples/udp-hello-plain.rkt b/racket/syndicate/examples/udp-hello-plain.rkt index f7b582a..7a1ad2f 100644 --- a/racket/syndicate/examples/udp-hello-plain.rkt +++ b/racket/syndicate/examples/udp-hello-plain.rkt @@ -1,8 +1,6 @@ #lang syndicate -(require "../drivers/udp.rkt") - -(spawn-udp-driver) +(require/activate "../drivers/udp.rkt") (spawn (lambda (e s) (match e diff --git a/racket/syndicate/examples/udp-multicast.rkt b/racket/syndicate/examples/udp-multicast.rkt index cc25e69..6b7f88f 100644 --- a/racket/syndicate/examples/udp-multicast.rkt +++ b/racket/syndicate/examples/udp-multicast.rkt @@ -1,13 +1,9 @@ -#lang syndicate +#lang syndicate/actor -(require syndicate/actor) -(require syndicate/drivers/timer) -(require syndicate/drivers/udp) +(require/activate syndicate/drivers/timer) +(require/activate syndicate/drivers/udp) (require racket/random file/sha1) -(spawn-timer-driver) -(spawn-udp-driver) - ;; IANA offers guidelines for choosing multicast addresses [1]. ;; ;; Reasonable candidates for local experimentation include: diff --git a/racket/syndicate/examples/ws-echo-client.rkt b/racket/syndicate/examples/ws-echo-client.rkt index e56312b..afd1900 100644 --- a/racket/syndicate/examples/ws-echo-client.rkt +++ b/racket/syndicate/examples/ws-echo-client.rkt @@ -1,10 +1,9 @@ -#lang syndicate +#lang syndicate/actor ;; Websocket echo client ;; racket ws-echo-client.rkt ws://localhost:8081/ ;; racket ws-echo-client.rkt wss://localhost:8084/ -(require syndicate/drivers/websocket) -(require syndicate/actor) +(require/activate syndicate/drivers/websocket) (require racket/port) (define url @@ -12,8 +11,6 @@ [(vector url) url] [(vector) "http://localhost:8081/ws-echo"])) -(spawn-websocket-driver) - (define c (websocket-local-client (gensym 'c))) (define s (websocket-remote-server url)) diff --git a/racket/syndicate/examples/ws-echo.rkt b/racket/syndicate/examples/ws-echo.rkt index d34de4a..18f598e 100644 --- a/racket/syndicate/examples/ws-echo.rkt +++ b/racket/syndicate/examples/ws-echo.rkt @@ -1,10 +1,7 @@ -#lang syndicate +#lang syndicate/actor ;; Websocket server that echoes all it receives -(require syndicate/drivers/websocket) -(require syndicate/actor) - -(spawn-websocket-driver) +(require/activate syndicate/drivers/websocket) (define any-client any-websocket-remote-client) (define tcp-server-id (websocket-local-server 8081 #f)) diff --git a/racket/syndicate/examples/ws-hello-ssl.rkt b/racket/syndicate/examples/ws-hello-ssl.rkt index 847233a..e8e059b 100644 --- a/racket/syndicate/examples/ws-hello-ssl.rkt +++ b/racket/syndicate/examples/ws-hello-ssl.rkt @@ -1,10 +1,8 @@ #lang syndicate -(require "../drivers/websocket.rkt") +(require/activate "../drivers/websocket.rkt") (require "../demand-matcher.rkt") -(spawn-websocket-driver) - (define any-client any-websocket-remote-client) (define server-id (websocket-local-server 8081 (websocket-ssl-options "server-cert.pem" "private-key.pem"))) diff --git a/racket/syndicate/examples/ws-hello.rkt b/racket/syndicate/examples/ws-hello.rkt index 4871b4b..2fd9c4a 100644 --- a/racket/syndicate/examples/ws-hello.rkt +++ b/racket/syndicate/examples/ws-hello.rkt @@ -1,10 +1,8 @@ #lang syndicate -(require "../drivers/websocket.rkt") +(require/activate "../drivers/websocket.rkt") (require "../demand-matcher.rkt") -(spawn-websocket-driver) - (define any-client any-websocket-remote-client) (define server-id (websocket-local-server 8081 #f)) diff --git a/racket/syndicate/lang.rkt b/racket/syndicate/lang.rkt index 1339535..9560f48 100644 --- a/racket/syndicate/lang.rkt +++ b/racket/syndicate/lang.rkt @@ -6,11 +6,29 @@ (require "main.rkt") (provide (rename-out [module-begin #%module-begin]) + activate + require/activate (except-out (all-from-out racket/base) #%module-begin) (all-from-out racket/match) (all-from-out "main.rkt") (for-syntax (all-from-out racket/base))) +(define-syntax (activate stx) + (syntax-case stx () + [(_ module-path ...) + #'(begin + (let () + (local-require (submod module-path syndicate-main)) + (activate!)) + ...)])) + +(define-syntax (require/activate stx) + (syntax-case stx () + [(_ module-path ...) + #'(begin + (require module-path ...) + (activate module-path ...))])) + (define-syntax (module-begin stx) (unless (eq? (syntax-local-context) 'module-begin) (raise-syntax-error #f "allowed only around a module body" stx)) @@ -21,7 +39,17 @@ (if (null? forms) (let ((final-stx #`(#%module-begin #,@(reverse final-forms) - (run-ground #,@(reverse action-ids))))) + (module+ syndicate-main + (provide boot-actions activate!) + (define activated? #f) + (define boot-actions (list #,@(reverse action-ids))) + (define (activate!) + (when (not activated?) + (set! activated? #t) + boot-actions))) + (module+ main + (require (submod ".." syndicate-main)) + (run-ground (activate!)))))) ;;(pretty-print (syntax->datum final-stx)) final-stx) (syntax-case (local-expand (car forms)