Introduce syndicate module *activation*.

Make #lang syndicate module-begin gather boot actions into a
syndicate-main submodule, and for each such module, add a main
submodule that calls run-ground with the syndicate-main boot actions.

This lets us write syndicate *libraries* that comprise both
data-structures, functions, and Syndicate services.
This commit is contained in:
Tony Garnock-Jones 2016-07-12 15:05:56 -04:00
parent e8d33d4135
commit 0b06bcf1c4
37 changed files with 95 additions and 117 deletions

View File

@ -1,4 +1,4 @@
#lang racket/base #lang syndicate/actor
;; Generic relay for WebSockets/TCP/etc-based participation in a network. ;; Generic relay for WebSockets/TCP/etc-based participation in a network.
(provide spawn-broker-server (provide spawn-broker-server
@ -110,18 +110,14 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(module+ main (require/activate syndicate/drivers/timer)
(require syndicate/ground) (require/activate syndicate/drivers/websocket)
(require syndicate/actor)
(require syndicate/drivers/timer) (let ((ssl-options
(require syndicate/drivers/websocket) (match (current-command-line-arguments)
(define ssl-options [(vector c p) (websocket-ssl-options c p)]
(match (current-command-line-arguments) [_ #f])))
[(vector c p) (websocket-ssl-options c p)] (dataspace (schedule-action! (spawn-broker-server 8000))
[_ #f])) (when ssl-options
(run-ground (spawn-timer-driver) (schedule-action! (spawn-broker-server 8443 #:ssl-options ssl-options)))
(spawn-websocket-driver) (forever)))
(dataspace (schedule-action! (spawn-broker-server 8000))
(when ssl-options
(schedule-action! (spawn-broker-server 8443 #:ssl-options ssl-options)))
(forever))))

View File

@ -1,10 +1,8 @@
#lang racket/base #lang syndicate
(require racket/match)
(require racket/exn) (require racket/exn)
(require (prefix-in tcp: racket/tcp)) (require (prefix-in tcp: racket/tcp))
(require (only-in racket/port read-bytes-avail!-evt)) (require (only-in racket/port read-bytes-avail!-evt))
(require "../main.rkt")
(require "../demand-matcher.rkt") (require "../demand-matcher.rkt")
(require racket/unit) (require racket/unit)
@ -187,3 +185,7 @@
(sub (tcp-channel local-addr remote-addr ?)) ;; want segments from peer (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 (sub (tcp-channel remote-addr local-addr ?) #:meta-level 1) ;; segments from driver thread
))) )))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(spawn-tcp-driver)

View File

@ -1,4 +1,4 @@
#lang racket/base #lang syndicate
;; Timer driver. ;; Timer driver.
;; Uses mutable state internally, but because the scope of the ;; Uses mutable state internally, but because the scope of the
@ -6,9 +6,7 @@
;; correct linear use of the various pointers. ;; correct linear use of the various pointers.
(require racket/set) (require racket/set)
(require racket/match)
(require data/heap) (require data/heap)
(require "../main.rkt")
(struct pending-timer (deadline label) #:transparent) (struct pending-timer (deadline label) #:transparent)
@ -126,3 +124,7 @@
(define (timer-evt msecs) (define (timer-evt msecs)
(handle-evt (alarm-evt msecs) (handle-evt (alarm-evt msecs)
(lambda (_) (current-inexact-milliseconds)))) (lambda (_) (current-inexact-milliseconds))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(spawn-timer-driver)

View File

@ -1,8 +1,6 @@
#lang racket/base #lang syndicate
(require racket/match)
(require (prefix-in udp: racket/udp)) (require (prefix-in udp: racket/udp))
(require "../main.rkt")
(require "../demand-matcher.rkt") (require "../demand-matcher.rkt")
(provide (struct-out udp-remote-address) (provide (struct-out udp-remote-address)
@ -112,3 +110,7 @@
(subbytes buffer 0 len))) (subbytes buffer 0 len)))
(loop))))) (loop)))))
(udp:udp-close socket)) (udp:udp-close socket))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(spawn-udp-driver)

View File

@ -1,4 +1,4 @@
#lang racket/base #lang syndicate
(provide (struct-out websocket-remote-client) (provide (struct-out websocket-remote-client)
(struct-out websocket-local-server) (struct-out websocket-local-server)
@ -11,14 +11,12 @@
any-websocket-remote-client) any-websocket-remote-client)
(require racket/exn) (require racket/exn)
(require racket/match)
(require net/rfc6455) (require net/rfc6455)
(require (only-in net/rfc6455/conn-api (require (only-in net/rfc6455/conn-api
ws-conn-base-ip ws-conn-base-ip
ws-conn-peer-addresses ws-conn-peer-addresses
ws-conn-host+port ws-conn-host+port
ws-conn-path)) ws-conn-path))
(require "../main.rkt")
(require "../demand-matcher.rkt") (require "../demand-matcher.rkt")
(require racket/unit) (require racket/unit)
@ -221,3 +219,7 @@
(sub (websocket-message local-addr remote-addr ?)) ;; want segments from peer (sub (websocket-message local-addr remote-addr ?)) ;; want segments from peer
(sub (websocket-incoming-message id ?) #:meta-level 1) ;; segments from driver thd (sub (websocket-incoming-message id ?) #:meta-level 1) ;; segments from driver thd
))) )))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(spawn-websocket-driver)

View File

@ -1,8 +1,6 @@
#lang syndicate/actor #lang syndicate/actor
(require syndicate/drivers/timer) (require/activate syndicate/drivers/timer)
(spawn-timer-driver)
(define (sleep sec) (define (sleep sec)
(define timer-id (gensym 'sleep)) (define timer-id (gensym 'sleep))

View File

@ -1,14 +1,12 @@
#lang syndicate/actor #lang syndicate/actor
(require syndicate/drivers/tcp) (require/activate syndicate/drivers/tcp)
(require (only-in racket/port read-bytes-line-evt)) (require (only-in racket/port read-bytes-line-evt))
(define local-handle (tcp-handle 'chat)) (define local-handle (tcp-handle 'chat))
(define remote-handle (tcp-address "localhost" 5999)) (define remote-handle (tcp-address "localhost" 5999))
(define stdin-evt (read-bytes-line-evt (current-input-port) 'any)) (define stdin-evt (read-bytes-line-evt (current-input-port) 'any))
(spawn-tcp-driver)
(actor (actor
(react/suspend (quit) (react/suspend (quit)
(on (message (external-event stdin-evt (list $line)) #:meta-level 1) (on (message (external-event stdin-evt (list $line)) #:meta-level 1)

View File

@ -1,6 +1,6 @@
#lang syndicate/actor #lang syndicate/actor
(require syndicate/drivers/tcp) (require/activate syndicate/drivers/tcp)
(require (only-in racket/string string-trim)) (require (only-in racket/string string-trim))
(struct says (who what) #:prefab) (struct says (who what) #:prefab)
@ -28,7 +28,6 @@
(on (message (tcp-channel them us $bs)) (on (message (tcp-channel them us $bs))
(send! (says user (string-trim (bytes->string/utf-8 bs)))))))) (send! (says user (string-trim (bytes->string/utf-8 bs))))))))
(spawn-tcp-driver)
(define us (tcp-listener 5999)) (define us (tcp-listener 5999))
(actor (actor
(forever (assert (advertise (observe (tcp-channel _ us _)))) (forever (assert (advertise (observe (tcp-channel _ us _))))

View File

@ -1,6 +1,6 @@
#lang syndicate/actor #lang syndicate/actor
(require syndicate/drivers/tcp) (require/activate syndicate/drivers/tcp)
(require (only-in racket/string string-trim)) (require (only-in racket/string string-trim))
(struct says (who what) #:prefab) (struct says (who what) #:prefab)
@ -29,7 +29,6 @@
(on (message (tcp-channel them us $bs) #:meta-level 1) (on (message (tcp-channel them us $bs) #:meta-level 1)
(send! (says user (string-trim (bytes->string/utf-8 bs)))))))) (send! (says user (string-trim (bytes->string/utf-8 bs))))))))
(spawn-tcp-driver)
(dataspace (define us (tcp-listener 5999)) (dataspace (define us (tcp-listener 5999))
(forever (assert (advertise (observe (tcp-channel _ us _))) #:meta-level 1) (forever (assert (advertise (observe (tcp-channel _ us _))) #:meta-level 1)
(on (asserted (advertise (tcp-channel $them us _)) #:meta-level 1) (on (asserted (advertise (tcp-channel $them us _)) #:meta-level 1)

View File

@ -1,6 +1,6 @@
#lang syndicate/actor #lang syndicate/actor
(require syndicate/drivers/tcp) (require/activate syndicate/drivers/tcp)
(require (only-in racket/string string-trim)) (require (only-in racket/string string-trim))
(struct tcp-remote-open (id) #:prefab) (struct tcp-remote-open (id) #:prefab)
@ -33,8 +33,6 @@
(on (message (tcp-incoming-data id $bs)) (on (message (tcp-incoming-data id $bs))
(send! (says user (string-trim (bytes->string/utf-8 bs)))))))) (send! (says user (string-trim (bytes->string/utf-8 bs))))))))
(spawn-tcp-driver)
(define us (tcp-listener 5999)) (define us (tcp-listener 5999))
(actor (forever (assert (advertise (observe (tcp-channel _ us _)))) (actor (forever (assert (advertise (observe (tcp-channel _ us _))))
(on (asserted (advertise (tcp-channel $them us _))) (on (asserted (advertise (tcp-channel $them us _)))

View File

@ -1,6 +1,6 @@
#lang syndicate/actor #lang syndicate/actor
(require syndicate/drivers/tcp) (require/activate syndicate/drivers/tcp)
(require (only-in racket/string string-trim)) (require (only-in racket/string string-trim))
(struct says (who what) #:prefab) (struct says (who what) #:prefab)
@ -33,7 +33,6 @@
(send! (shutdown)) (send! (shutdown))
(send! (says user input-string))))))) (send! (says user input-string)))))))
(spawn-tcp-driver)
(dataspace (define us (tcp-listener 5999)) (dataspace (define us (tcp-listener 5999))
(until (message (shutdown)) (until (message (shutdown))
(assert (advertise (observe (tcp-channel _ us _))) #:meta-level 1) (assert (advertise (observe (tcp-channel _ us _))) #:meta-level 1)

View File

@ -1,8 +1,6 @@
#lang syndicate/actor #lang syndicate/actor
(require syndicate/drivers/tcp) (require/activate syndicate/drivers/tcp)
(spawn-tcp-driver)
(define server-id (tcp-listener 5999)) (define server-id (tcp-listener 5999))
(actor (actor

View File

@ -2,7 +2,7 @@
;; Toy file system, based on the example in the ESOP2016 submission. ;; Toy file system, based on the example in the ESOP2016 submission.
;; syndicate/actor implementation, using "during" instead of "on asserted/until retracted". ;; 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/port read-bytes-line-evt))
(require (only-in racket/string string-trim string-split)) (require (only-in racket/string string-trim string-split))
@ -10,8 +10,6 @@
(struct save (file) #:prefab) (struct save (file) #:prefab)
(struct delete (name) #:prefab) (struct delete (name) #:prefab)
(spawn-timer-driver)
(actor (react (field [files (hash)]) (actor (react (field [files (hash)])
(during (observe (file $name _)) (during (observe (file $name _))
(on-start (printf "At least one reader exists for ~v\n" name)) (on-start (printf "At least one reader exists for ~v\n" name))

View File

@ -3,7 +3,7 @@
;; Low-level implementation. ;; Low-level implementation.
(require (only-in syndicate [assert core:assert])) (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/port read-bytes-line-evt))
(require (only-in racket/string string-trim string-split)) (require (only-in racket/string string-trim string-split))
(require racket/set) (require racket/set)
@ -12,8 +12,6 @@
(struct save (file) #:prefab) (struct save (file) #:prefab)
(struct delete (name) #:prefab) (struct delete (name) #:prefab)
(spawn-timer-driver)
(define (file-system-event-handler e files) (define (file-system-event-handler e files)
(match-event e (match-event e
[(? patch? p) [(? patch? p)

View File

@ -3,7 +3,7 @@
;; Low-level implementation, without subconversation. ;; Low-level implementation, without subconversation.
(require (only-in syndicate [assert core:assert])) (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/port read-bytes-line-evt))
(require (only-in racket/string string-trim string-split)) (require (only-in racket/string string-trim string-split))
(require racket/set) (require racket/set)
@ -14,8 +14,6 @@
(struct fs-state (files monitored) #:prefab) (struct fs-state (files monitored) #:prefab)
(spawn-timer-driver)
(define (update-file state name new-content) (define (update-file state name new-content)
(transition (struct-copy fs-state state (transition (struct-copy fs-state state
[files (if new-content [files (if new-content

View File

@ -2,7 +2,7 @@
;; Toy file system, based on the example in the ESOP2016 submission. ;; Toy file system, based on the example in the ESOP2016 submission.
;; syndicate/actor implementation. ;; 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/port read-bytes-line-evt))
(require (only-in racket/string string-trim string-split)) (require (only-in racket/string string-trim string-split))
@ -10,8 +10,6 @@
(struct save (file) #:prefab) (struct save (file) #:prefab)
(struct delete (name) #:prefab) (struct delete (name) #:prefab)
(spawn-timer-driver)
(actor (react (field [files (hash)]) (actor (react (field [files (hash)])
(on (asserted (observe (file $name _))) (on (asserted (observe (file $name _)))
(printf "At least one reader exists for ~v\n" name) (printf "At least one reader exists for ~v\n" name)

View File

@ -2,7 +2,7 @@
;; Toy file system, based on the example in the ESOP2016 submission. ;; Toy file system, based on the example in the ESOP2016 submission.
;; syndicate/actor implementation, without subconversation. ;; 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/port read-bytes-line-evt))
(require (only-in racket/string string-trim string-split)) (require (only-in racket/string string-trim string-split))
(require racket/set) (require racket/set)
@ -11,8 +11,6 @@
(struct save (file) #:prefab) (struct save (file) #:prefab)
(struct delete (name) #:prefab) (struct delete (name) #:prefab)
(spawn-timer-driver)
(actor (react (field [files (hash)] [monitored (set)]) (actor (react (field [files (hash)] [monitored (set)])
(on (asserted (observe (file $name _))) (on (asserted (observe (file $name _)))
(printf "At least one reader exists for ~v\n" name) (printf "At least one reader exists for ~v\n" name)

View File

@ -1,7 +1,6 @@
#lang syndicate/actor #lang syndicate/actor
;; A toy spreadsheet model. ;; A toy spreadsheet model.
(require racket/match)
(require racket/set) (require racket/set)
(define-namespace-anchor ns) (define-namespace-anchor ns)

View File

@ -1,4 +1,4 @@
#lang syndicate #lang syndicate/actor
;; After Figure 1 in "Logic and lattices for distributed programming", ;; After Figure 1 in "Logic and lattices for distributed programming",
;; Conway et. al, UCB tech report, 2012 ;; Conway et. al, UCB tech report, 2012
;; ;;
@ -6,7 +6,6 @@
;; input. ;; input.
(require racket/set) (require racket/set)
(require syndicate/actor)
(struct link (from to cost) #:prefab) (struct link (from to cost) #:prefab)
(struct path (from to cost) #:prefab) (struct path (from to cost) #:prefab)

View File

@ -1,11 +1,10 @@
#lang syndicate #lang syndicate/actor
;; After Figure 1 in "Logic and lattices for distributed programming", ;; After Figure 1 in "Logic and lattices for distributed programming",
;; Conway et. al, UCB tech report, 2012 ;; Conway et. al, UCB tech report, 2012
;; ;;
;; Added path-seen set to ensure termination on input cycles. ;; Added path-seen set to ensure termination on input cycles.
(require racket/set) (require racket/set)
(require syndicate/actor)
(struct link (from to cost) #:prefab) (struct link (from to cost) #:prefab)
(struct path (from to seen cost) #:prefab) (struct path (from to seen cost) #:prefab)

View File

@ -1,12 +1,11 @@
#lang syndicate #lang syndicate
(require (only-in racket/port read-bytes-line-evt)) (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 local-handle (tcp-handle 'chat))
(define remote-handle (tcp-address "localhost" 5999)) (define remote-handle (tcp-address "localhost" 5999))
(spawn-tcp-driver)
(spawn/stateless (lambda (e) (spawn/stateless (lambda (e)
(match e (match e
[(? patch/removed?) (quit)] [(? patch/removed?) (quit)]

View File

@ -1,7 +1,7 @@
#lang syndicate #lang syndicate
(require (only-in racket/string string-trim)) (require (only-in racket/string string-trim))
(require "../drivers/tcp.rkt") (require/activate "../drivers/tcp.rkt")
(require "../demand-matcher.rkt") (require "../demand-matcher.rkt")
(define (spawn-session them us) (define (spawn-session them us)
@ -36,7 +36,6 @@
(pub (tcp-channel us them ?)) ;; we will write to remote client (pub (tcp-channel us them ?)) ;; we will write to remote client
)))) ))))
(spawn-tcp-driver)
(spawn-demand-matcher (advertise (tcp-channel (?!) (?! (tcp-listener 5999)) ?)) (spawn-demand-matcher (advertise (tcp-channel (?!) (?! (tcp-listener 5999)) ?))
(observe (tcp-channel (?!) (?! (tcp-listener 5999)) ?)) (observe (tcp-channel (?!) (?! (tcp-listener 5999)) ?))
spawn-session) spawn-session)

View File

@ -1,7 +1,7 @@
#lang syndicate #lang syndicate
(require (only-in racket/string string-trim)) (require (only-in racket/string string-trim))
(require "../drivers/tcp.rkt") (require/activate "../drivers/tcp.rkt")
(require "../demand-matcher.rkt") (require "../demand-matcher.rkt")
(define (spawn-session them us) (define (spawn-session them us)
@ -36,7 +36,6 @@
(pub (tcp-channel us them ?) #:meta-level 1) ;; we will write to remote client (pub (tcp-channel us them ?) #:meta-level 1) ;; we will write to remote client
)))) ))))
(spawn-tcp-driver)
(spawn-dataspace (spawn-dataspace
(spawn-demand-matcher (advertise (tcp-channel (?!) (?! (tcp-listener 5999)) ?)) (spawn-demand-matcher (advertise (tcp-channel (?!) (?! (tcp-listener 5999)) ?))
(observe (tcp-channel (?!) (?! (tcp-listener 5999)) ?)) (observe (tcp-channel (?!) (?! (tcp-listener 5999)) ?))

View File

@ -3,7 +3,7 @@
;; driver's protocol. ;; driver's protocol.
(require (only-in racket/string string-trim)) (require (only-in racket/string string-trim))
(require "../drivers/tcp.rkt") (require/activate "../drivers/tcp.rkt")
(require "../demand-matcher.rkt") (require "../demand-matcher.rkt")
(struct tcp-remote-open (id) #:prefab) (struct tcp-remote-open (id) #:prefab)
@ -63,8 +63,6 @@
(assert (tcp-local-open id)) ;; indicate our end of the connection is up (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)) ?)) (spawn-demand-matcher (advertise (tcp-channel (?!) (?! (tcp-listener 5999)) ?))
(observe (tcp-channel (?!) (?! (tcp-listener 5999)) ?)) (observe (tcp-channel (?!) (?! (tcp-listener 5999)) ?))
tcp-proxy-process) tcp-proxy-process)

View File

@ -1,7 +1,7 @@
#lang syndicate #lang syndicate
(require (only-in racket/string string-trim)) (require (only-in racket/string string-trim))
(require "../drivers/tcp.rkt") (require/activate "../drivers/tcp.rkt")
(require "../demand-matcher.rkt") (require "../demand-matcher.rkt")
(define (spawn-session them us) (define (spawn-session them us)
@ -39,7 +39,6 @@
(pub (tcp-channel us them ?) #:meta-level 1) ;; we will write to remote client (pub (tcp-channel us them ?) #:meta-level 1) ;; we will write to remote client
)))) ))))
(spawn-tcp-driver)
(spawn-dataspace (spawn-dataspace
(spawn-demand-matcher (advertise (tcp-channel (?!) (?! (tcp-listener 5999)) ?)) (spawn-demand-matcher (advertise (tcp-channel (?!) (?! (tcp-listener 5999)) ?))
(observe (tcp-channel (?!) (?! (tcp-listener 5999)) ?)) (observe (tcp-channel (?!) (?! (tcp-listener 5999)) ?))

View File

@ -1,11 +1,10 @@
#lang syndicate #lang syndicate
(require "../drivers/tcp.rkt") (require/activate "../drivers/tcp.rkt")
(require "../demand-matcher.rkt") (require "../demand-matcher.rkt")
(define server-id (tcp-listener 5999)) (define server-id (tcp-listener 5999))
(spawn-tcp-driver)
(spawn-demand-matcher (advertise (tcp-channel (?!) server-id ?)) (spawn-demand-matcher (advertise (tcp-channel (?!) server-id ?))
(observe (tcp-channel (?!) server-id ?)) (observe (tcp-channel (?!) server-id ?))
(lambda (c) (lambda (c)

View File

@ -1,9 +1,7 @@
#lang syndicate #lang syndicate
(require "../endpoint.rkt") (require "../endpoint.rkt")
(require "../drivers/timer.rkt") (require/activate "../drivers/timer.rkt")
(spawn-timer-driver)
(define ((log-it eid) e u) (define ((log-it eid) e u)
(log-info "endpoint ~a state ~a: ~v" eid u e) (log-info "endpoint ~a state ~a: ~v" eid u e)

View File

@ -1,7 +1,7 @@
#lang syndicate #lang syndicate
(require (only-in racket/port read-line-evt)) (require (only-in racket/port read-line-evt))
(require "../drivers/timer.rkt") (require/activate "../drivers/timer.rkt")
(define (quasi-spy e s) (define (quasi-spy e s)
(printf "----------------------------------------\n") (printf "----------------------------------------\n")
@ -55,7 +55,6 @@
(quit))] (quit))]
[_ #f])) [_ #f]))
(spawn-timer-driver)
(message (set-timer 'tick 1000 'relative)) (message (set-timer 'tick 1000 'relative))
(spawn ticker (spawn ticker
1 1

View File

@ -3,9 +3,7 @@
(require racket/set) (require racket/set)
(require "../trie.rkt") (require "../trie.rkt")
(require "../demand-matcher.rkt") (require "../demand-matcher.rkt")
(require "../drivers/timer.rkt") (require/activate "../drivers/timer.rkt")
(spawn-timer-driver)
(spawn (lambda (e old-count) (spawn (lambda (e old-count)
(match e (match e

View File

@ -1,10 +1,8 @@
#lang syndicate #lang syndicate
(require "../drivers/tcp.rkt") (require/activate "../drivers/tcp.rkt")
(require "../demand-matcher.rkt") (require "../demand-matcher.rkt")
(spawn-tcp-driver)
(define server-id (tcp-listener 5999)) (define server-id (tcp-listener 5999))
(define (spawn-connection-handler c) (define (spawn-connection-handler c)

View File

@ -1,8 +1,6 @@
#lang syndicate #lang syndicate
(require "../drivers/udp.rkt") (require/activate "../drivers/udp.rkt")
(spawn-udp-driver)
(spawn (lambda (e s) (spawn (lambda (e s)
(match e (match e

View File

@ -1,13 +1,9 @@
#lang syndicate #lang syndicate/actor
(require syndicate/actor) (require/activate syndicate/drivers/timer)
(require syndicate/drivers/timer) (require/activate syndicate/drivers/udp)
(require syndicate/drivers/udp)
(require racket/random file/sha1) (require racket/random file/sha1)
(spawn-timer-driver)
(spawn-udp-driver)
;; IANA offers guidelines for choosing multicast addresses [1]. ;; IANA offers guidelines for choosing multicast addresses [1].
;; ;;
;; Reasonable candidates for local experimentation include: ;; Reasonable candidates for local experimentation include:

View File

@ -1,10 +1,9 @@
#lang syndicate #lang syndicate/actor
;; Websocket echo client ;; Websocket echo client
;; racket ws-echo-client.rkt ws://localhost:8081/ ;; racket ws-echo-client.rkt ws://localhost:8081/
;; racket ws-echo-client.rkt wss://localhost:8084/ ;; racket ws-echo-client.rkt wss://localhost:8084/
(require syndicate/drivers/websocket) (require/activate syndicate/drivers/websocket)
(require syndicate/actor)
(require racket/port) (require racket/port)
(define url (define url
@ -12,8 +11,6 @@
[(vector url) url] [(vector url) url]
[(vector) "http://localhost:8081/ws-echo"])) [(vector) "http://localhost:8081/ws-echo"]))
(spawn-websocket-driver)
(define c (websocket-local-client (gensym 'c))) (define c (websocket-local-client (gensym 'c)))
(define s (websocket-remote-server url)) (define s (websocket-remote-server url))

View File

@ -1,10 +1,7 @@
#lang syndicate #lang syndicate/actor
;; Websocket server that echoes all it receives ;; Websocket server that echoes all it receives
(require syndicate/drivers/websocket) (require/activate syndicate/drivers/websocket)
(require syndicate/actor)
(spawn-websocket-driver)
(define any-client any-websocket-remote-client) (define any-client any-websocket-remote-client)
(define tcp-server-id (websocket-local-server 8081 #f)) (define tcp-server-id (websocket-local-server 8081 #f))

View File

@ -1,10 +1,8 @@
#lang syndicate #lang syndicate
(require "../drivers/websocket.rkt") (require/activate "../drivers/websocket.rkt")
(require "../demand-matcher.rkt") (require "../demand-matcher.rkt")
(spawn-websocket-driver)
(define any-client any-websocket-remote-client) (define any-client any-websocket-remote-client)
(define server-id (websocket-local-server 8081 (websocket-ssl-options "server-cert.pem" (define server-id (websocket-local-server 8081 (websocket-ssl-options "server-cert.pem"
"private-key.pem"))) "private-key.pem")))

View File

@ -1,10 +1,8 @@
#lang syndicate #lang syndicate
(require "../drivers/websocket.rkt") (require/activate "../drivers/websocket.rkt")
(require "../demand-matcher.rkt") (require "../demand-matcher.rkt")
(spawn-websocket-driver)
(define any-client any-websocket-remote-client) (define any-client any-websocket-remote-client)
(define server-id (websocket-local-server 8081 #f)) (define server-id (websocket-local-server 8081 #f))

View File

@ -6,11 +6,29 @@
(require "main.rkt") (require "main.rkt")
(provide (rename-out [module-begin #%module-begin]) (provide (rename-out [module-begin #%module-begin])
activate
require/activate
(except-out (all-from-out racket/base) #%module-begin) (except-out (all-from-out racket/base) #%module-begin)
(all-from-out racket/match) (all-from-out racket/match)
(all-from-out "main.rkt") (all-from-out "main.rkt")
(for-syntax (all-from-out racket/base))) (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) (define-syntax (module-begin stx)
(unless (eq? (syntax-local-context) 'module-begin) (unless (eq? (syntax-local-context) 'module-begin)
(raise-syntax-error #f "allowed only around a module body" stx)) (raise-syntax-error #f "allowed only around a module body" stx))
@ -21,7 +39,17 @@
(if (null? forms) (if (null? forms)
(let ((final-stx (let ((final-stx
#`(#%module-begin #,@(reverse final-forms) #`(#%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)) ;;(pretty-print (syntax->datum final-stx))
final-stx) final-stx)
(syntax-case (local-expand (car forms) (syntax-case (local-expand (car forms)