;;;; 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)))