diff --git a/syndicate/broker/main.rkt b/syndicate/broker/main.rkt index 118fa91..02000c6 100644 --- a/syndicate/broker/main.rkt +++ b/syndicate/broker/main.rkt @@ -11,17 +11,38 @@ (require/activate imperative-syndicate/drivers/tcp) (require/activate imperative-syndicate/drivers/web) -(define (main) - (spawn #:name 'server-listener - (define tcp-scope "broker") - (during/spawn (tcp-connection $id (tcp-listener 8001)) - #:name `(server-connection ,tcp-scope ,id) - (server-facet/tcp id tcp-scope)) +(define *default-tcp-port* 8001) +(define *default-http-port* 8000) - (during/spawn (http-request $id 'get (http-resource (http-server _ 8000 #f) - `(,$scope ())) _ _ _) - #:name `(server-connection ,scope ,id) - (server-facet/websocket id scope)))) +(define (main #:tcp-port [tcp-port *default-tcp-port*] + #:http-port [http-port *default-http-port*]) + (spawn #:name 'server-listener + (when tcp-port + (define tcp-scope "broker") + (during/spawn (tcp-connection $id (tcp-listener tcp-port)) + #:name `(server-connection ,tcp-scope ,id) + (server-facet/tcp id tcp-scope))) + (when http-port + (during/spawn (http-request $id 'get (http-resource (http-server _ http-port #f) + `(,$scope ())) _ _ _) + #:name `(server-connection ,scope ,id) + (server-facet/websocket id scope))))) (module+ main - (extend-ground-boot! main)) + (require racket/cmdline) + (define tcp-port *default-tcp-port*) + (define http-port *default-http-port*) + (command-line #:once-any + ["--tcp" port + ((format "Listen on plain TCP port (default ~a)" *default-tcp-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-port*)) + (set! http-port (string->number port))] + ["--no-http" "Do not listen on any websocket HTTP port" + (set! http-port #f)]) + (extend-ground-boot! (lambda () (main #:tcp-port tcp-port + #:http-port http-port))))