ywatds/dataserver.lisp

37 lines
1.2 KiB
Common Lisp

(defpackage :ywatds
(:use :cl)
(:export :program-entry))
(in-package :ywatds)
(defun program-entry ()
(let* ((argv (uiop:command-line-arguments))
(worldpath (uiop:ensure-pathname (car argv)
:defaults (uiop:getcwd)
:ensure-directory t
:want-existing t
:ensure-absolute t))
(scriptpath (uiop:ensure-pathname *load-truename*))
(scriptdir (uiop:pathname-directory-pathname scriptpath))
(wwwpath (uiop:ensure-pathname (uiop:subpathname scriptdir "www")
:defaults (uiop:getcwd)
:ensure-directory t
:want-existing t
:ensure-absolute t))
(serverport (parse-integer (cadr argv)))
(server (make-instance 'easy-routes:easy-routes-acceptor
:port serverport)))
(setf (hunchentoot:acceptor-document-root server) wwwpath)
(ywsw:safe-text-route
("/dumpser/:p" :method :get) (&path (p 'string))
(format nil "~s"
(atsl:from-file
(uiop:subpathname worldpath (format nil "advtrains_~a" p))
:alist)))
(hunchentoot:start server)
;; loop until an error occurs
(handler-case (loop (sleep most-positive-fixnum))
(t (c) (format t "~&~a~%" c)))
(ignore-errors
(hunchentoot:stop server)
(uiop:quit))))