You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pollen/pollen/private/project-server.rkt

58 lines
2.5 KiB
Racket

#lang web-server/base
(require racket/runtime-path
web-server/servlet-env
web-server/dispatch
"project-server-routes.rkt"
"log.rkt"
"../setup.rkt"
"../file.rkt"
"version.rkt")
(provide start-server)
(define-runtime-path mime-types "server-extras/mime.types")
(define (start-server servlet-path [open-browser-window? #f]
#:serve-only [serve-only? #false])
(define-values (pollen-servlet _)
(dispatch-rules
[((string-arg) ... (? (λ (x) (string=? "" x)))) route-index] ; last element of a "/"-terminated url is ""
[((string-arg) ... (? pagetree-source?)) route-dashboard]
[((string-arg) ... "in" (string-arg) ...) route-in]
[((string-arg) ... "out" (string-arg) ...) route-out]
[else route-default]))
(message (format "welcome to Pollen ~a (Racket ~a)" pollen:version (version)))
(message (format "project root is ~a" (current-project-root)))
(define server-name (format "http://localhost:~a" (current-server-port)))
(message (format "project server is ~a (Ctrl+C to exit)" server-name))
(message (format "project dashboard is ~a/~a" server-name (setup:main-pagetree)))
(message (if (current-server-listen-ip)
(format "project server permitting access only to ~a"
(case (current-server-listen-ip)
[("127.0.0.1") "localhost"]
[else (current-server-listen-ip)]))
"project server permitting access to all clients"))
(message "ready to rock")
(cond
[serve-only?
(define stopper
((dynamic-require 'web-server/web-server 'serve)
#:dispatch ((dynamic-require 'web-server/servlet-dispatch 'dispatch/servlet) pollen-servlet)
#:listen-ip (current-server-listen-ip)
#:port (current-server-port)))
stopper]
[else
(parameterize ([error-print-width 1000])
(serve/servlet pollen-servlet
#:launch-browser? open-browser-window?
#:servlet-path servlet-path
#:port (current-server-port)
#:listen-ip (current-server-listen-ip)
#:servlet-regexp #rx"" ; respond to top level
#:command-line? #true
#:file-not-found-responder route-404
#:mime-types-path mime-types
#:extra-files-paths (list (current-server-extras-path) (current-project-root))))]))