#lang imperative-syndicate (provide (all-from-out "protocol.rkt") (all-from-out "client.rkt") (all-from-out "server.rkt")) (require "protocol.rkt") (require/activate "client.rkt") (require/activate "server.rkt") (require/activate imperative-syndicate/drivers/tcp) (require/activate imperative-syndicate/drivers/web) (define *default-tcp-port* 8001) (define *default-http-port* 8000) (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 (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))))