2019-03-18 15:34:14 +00:00
|
|
|
#lang imperative-syndicate
|
|
|
|
|
|
|
|
(provide (all-from-out "protocol.rkt")
|
|
|
|
(all-from-out "client.rkt")
|
2019-03-25 11:44:12 +00:00
|
|
|
(all-from-out "client/tcp.rkt")
|
|
|
|
(all-from-out "client/loopback.rkt")
|
|
|
|
(all-from-out "server.rkt")
|
|
|
|
(all-from-out "server/tcp.rkt")
|
|
|
|
(all-from-out "server/websocket.rkt"))
|
2019-03-18 15:34:14 +00:00
|
|
|
|
2019-05-09 10:17:37 +00:00
|
|
|
(require "internal-protocol.rkt")
|
2019-03-18 15:34:14 +00:00
|
|
|
(require "protocol.rkt")
|
|
|
|
|
2019-03-25 11:44:12 +00:00
|
|
|
(require/activate "client.rkt")
|
|
|
|
(require/activate "client/tcp.rkt")
|
|
|
|
(require/activate "client/loopback.rkt")
|
2019-03-18 15:34:14 +00:00
|
|
|
|
2019-03-25 11:44:12 +00:00
|
|
|
(require/activate "server.rkt")
|
|
|
|
(require/activate "server/tcp.rkt")
|
|
|
|
(require/activate "server/websocket.rkt")
|
2019-03-18 15:34:14 +00:00
|
|
|
|
2019-05-09 10:17:37 +00:00
|
|
|
(require/activate "federation.rkt")
|
|
|
|
|
2019-03-18 15:34:14 +00:00
|
|
|
(module+ main
|
2019-03-22 12:51:59 +00:00
|
|
|
(require racket/cmdline)
|
2019-05-05 15:37:03 +00:00
|
|
|
(define tcp-port default-tcp-server-port)
|
|
|
|
(define http-port default-http-server-port)
|
2019-05-16 21:28:42 +00:00
|
|
|
(define default-management-scope "local")
|
2019-05-09 10:17:37 +00:00
|
|
|
(define uplinks '())
|
2019-05-16 21:28:42 +00:00
|
|
|
(define management-scope default-management-scope)
|
2019-03-22 12:51:59 +00:00
|
|
|
(command-line #:once-any
|
|
|
|
["--tcp" port
|
2019-05-05 15:37:03 +00:00
|
|
|
((format "Listen on plain TCP port (default ~a)" default-tcp-server-port))
|
2019-03-22 12:51:59 +00:00
|
|
|
(set! tcp-port (string->number port))]
|
|
|
|
["--no-tcp" "Do not listen on any plain TCP port"
|
|
|
|
(set! tcp-port #f)]
|
|
|
|
#:once-any
|
|
|
|
["--http" port
|
2019-05-05 15:37:03 +00:00
|
|
|
((format "Listen on websocket HTTP port (default ~a)" default-http-server-port))
|
2019-03-22 12:51:59 +00:00
|
|
|
(set! http-port (string->number port))]
|
|
|
|
["--no-http" "Do not listen on any websocket HTTP port"
|
2019-05-09 10:17:37 +00:00
|
|
|
(set! http-port #f)]
|
|
|
|
#:multi
|
2019-05-16 21:28:42 +00:00
|
|
|
[("--management-scope" "-m") scope
|
|
|
|
("Set the management scope for future `--uplink`s and, "
|
|
|
|
"ultimately, for local federation management use. "
|
|
|
|
(format "(default ~v)" default-management-scope))
|
|
|
|
(set! management-scope scope)]
|
2019-05-09 10:17:37 +00:00
|
|
|
["--uplink" local-scope host port remote-scope
|
2019-05-16 21:28:42 +00:00
|
|
|
("Connect the named local-scope to the named remote-scope"
|
|
|
|
"via the management scope in the server at host:port")
|
2019-05-09 10:17:37 +00:00
|
|
|
(define port-number (string->number port))
|
|
|
|
(when (not port-number)
|
|
|
|
(eprintf "Invalid --uplink port number: ~v" port)
|
|
|
|
(exit 1))
|
|
|
|
(set! uplinks (cons (federated-uplink local-scope
|
|
|
|
(server-tcp-connection host
|
|
|
|
port-number
|
2019-05-16 21:28:42 +00:00
|
|
|
management-scope)
|
|
|
|
remote-scope)
|
2019-05-09 10:17:37 +00:00
|
|
|
uplinks))])
|
2019-03-25 11:44:12 +00:00
|
|
|
(extend-ground-boot! (lambda ()
|
2019-05-16 21:28:42 +00:00
|
|
|
(spawn (assert (federation-management-scope management-scope)))
|
|
|
|
;; ^ for inbound as well as outbound links
|
2019-05-05 15:37:03 +00:00
|
|
|
(when tcp-port (spawn-tcp-server! tcp-port))
|
2019-05-09 10:17:37 +00:00
|
|
|
(when http-port (spawn-websocket-server! http-port))
|
|
|
|
(when (pair? uplinks)
|
2019-05-16 21:28:42 +00:00
|
|
|
(spawn (define a (server-loopback-connection management-scope))
|
|
|
|
(assert (server-connection a))
|
|
|
|
(for [(u uplinks)]
|
|
|
|
(assert (to-server a u))))))))
|
2019-03-25 11:44:12 +00:00
|
|
|
|
2019-05-05 15:51:23 +00:00
|
|
|
(define-logger syndicate/distributed)
|
2019-03-25 11:44:12 +00:00
|
|
|
|
2019-05-05 15:51:23 +00:00
|
|
|
(when (log-level? syndicate/distributed-logger 'debug)
|
2019-05-20 20:45:40 +00:00
|
|
|
(spawn #:name 'client-debug
|
|
|
|
(on (asserted (server-connection $addr))
|
|
|
|
(log-syndicate/distributed-debug "C + ~v" addr))
|
|
|
|
(on (retracted (server-connection $addr))
|
|
|
|
(log-syndicate/distributed-debug "C - ~v" addr))
|
|
|
|
(on (message (server-packet $addr $p))
|
|
|
|
(log-syndicate/distributed-debug "C IN ~v ~v" addr p))
|
|
|
|
;; C OUT is covered in client.rkt
|
|
|
|
)
|
2019-03-25 11:44:12 +00:00
|
|
|
(spawn #:name 'server-debug
|
2019-05-07 11:56:22 +00:00
|
|
|
(on (asserted (server-poa $id))
|
2019-05-20 20:45:40 +00:00
|
|
|
(log-syndicate/distributed-debug "S + ~v" id))
|
2019-05-07 11:56:22 +00:00
|
|
|
(on (retracted (server-poa $id))
|
2019-05-20 20:45:40 +00:00
|
|
|
(log-syndicate/distributed-debug "S - ~v" id))
|
2019-05-05 15:37:03 +00:00
|
|
|
(on (message (message-poa->server $id $p))
|
2019-05-20 20:45:40 +00:00
|
|
|
(log-syndicate/distributed-debug "S IN ~v ~v" id p))
|
2019-05-05 15:37:03 +00:00
|
|
|
(on (message (message-server->poa $id $p))
|
2019-05-20 20:45:40 +00:00
|
|
|
(log-syndicate/distributed-debug "S OUT ~v ~v" id p))))
|