cl-scopes/web/server.lisp

43 lines
1.1 KiB
Common Lisp

;;;; cl-scopes/web/server - web server functionality
(defpackage :scopes/web/server
(:use :common-lisp)
(:local-nicknames (:config :scopes/config)
(:core :scopes/core))
(:export #:config #:address #:port
#:*listener* #:setup #:start #:stop))
(in-package :scopes/web/server)
(defclass config (config:base)
((config:env-slots :initform '(address port))
(config:setup :initform #'setup)
(address :reader address :initarg :address :initform "localhost")
(port :reader port :initarg :port :initform "8888")))
;;;; listener = server process
(defvar *listener* nil)
(defun app (env)
(print env)
'(200 (:content-type "text/plain") ("Hello World!")))
(defun start (cfg)
(setf *listener*
(clack:clackup #'app
:port (parse-integer (port cfg))
:address (address cfg)
:silent t)))
(defun stop ()
(clack:stop *listener*))
;;;; server context (= service)
(defclass context (core:context) ())
(defun setup (cfg)
(prog1
(make-instance 'context :config cfg :name (config:name cfg))
(start cfg)))