syndicate-rkt/syndicate/distributed/main.rkt

72 lines
3.0 KiB
Racket

#lang imperative-syndicate
(provide (all-from-out "protocol.rkt")
(all-from-out "client.rkt")
(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"))
(require "internal-protocol.rkt")
(require "protocol.rkt")
(require/activate "client.rkt")
(require/activate "client/tcp.rkt")
(require/activate "client/loopback.rkt")
(require/activate "server.rkt")
(require/activate "server/tcp.rkt")
(require/activate "server/websocket.rkt")
(require/activate "federation.rkt")
(module+ main
(require racket/cmdline)
(define tcp-port default-tcp-server-port)
(define http-port default-http-server-port)
(define uplinks '())
(command-line #:once-any
["--tcp" port
((format "Listen on plain TCP port (default ~a)" default-tcp-server-port))
(set! tcp-port (string->number port))]
["--no-tcp" "Do not listen on any plain TCP port"
(set! tcp-port #f)]
#:once-any
["--http" port
((format "Listen on websocket HTTP port (default ~a)" default-http-server-port))
(set! http-port (string->number port))]
["--no-http" "Do not listen on any websocket HTTP port"
(set! http-port #f)]
#:multi
["--uplink" local-scope host port remote-scope
"Connect the named local scope to the named scope at the server at host:port"
(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
remote-scope))
uplinks))])
(extend-ground-boot! (lambda ()
(when tcp-port (spawn-tcp-server! tcp-port))
(when http-port (spawn-websocket-server! http-port))
(when (pair? uplinks)
(spawn (for [(u uplinks)]
(assert u)))))))
(define-logger syndicate/distributed)
(when (log-level? syndicate/distributed-logger 'debug)
(spawn #:name 'server-debug
(on (asserted (server-poa $id))
(log-syndicate/distributed-debug "+ ~v" id))
(on (retracted (server-poa $id))
(log-syndicate/distributed-debug "- ~v" id))
(on (message (message-poa->server $id $p))
(log-syndicate/distributed-debug "IN ~v ~v" id p))
(on (message (message-server->poa $id $p))
(log-syndicate/distributed-debug "OUT ~v ~v" id p))))