syndicate-rkt/syndicate/broker/main.rkt

49 lines
1.9 KiB
Racket
Raw Normal View History

2019-03-18 15:34:14 +00:00
#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)
2019-03-22 12:51:59 +00:00
(define *default-tcp-port* 8001)
(define *default-http-port* 8000)
2019-03-18 15:34:14 +00:00
2019-03-22 12:51:59 +00:00
(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)))))
2019-03-18 15:34:14 +00:00
(module+ main
2019-03-22 12:51:59 +00:00
(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))))