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:
parent
e8d33d4135
commit
0b06bcf1c4
|
@ -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))))
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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 _))))
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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 _)))
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)]
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)) ?))
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)) ?))
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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))
|
||||||
|
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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")))
|
||||||
|
|
|
@ -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))
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue