Compare commits
2 commits
c52d6adca7
...
2d59317980
Author | SHA1 | Date | |
---|---|---|---|
2d59317980 | |||
84ce2c9e3a |
1 changed files with 18 additions and 23 deletions
|
@ -14,23 +14,20 @@
|
||||||
|
|
||||||
(in-package :scopes/web/response)
|
(in-package :scopes/web/response)
|
||||||
|
|
||||||
;;;; server interaction - receive response message from action processing chain
|
;;;; predefined action handlers / default actions
|
||||||
;;; predefined action handlers / default actions
|
|
||||||
|
|
||||||
(defun render-msg (resp msg)
|
(defun render-msg (resp msg)
|
||||||
(push msg (messages resp))
|
(prepare resp)
|
||||||
(actor:stop resp)
|
(if msg
|
||||||
;(finish resp)
|
(funcall (writer resp) (render-content resp msg)))
|
||||||
)
|
(finish resp))
|
||||||
|
|
||||||
(defun set-cookie (resp msg)
|
(defun set-cookie (resp msg)
|
||||||
(util:plist-add (headers resp)
|
(util:plist-add (headers resp)
|
||||||
:set-cookie (render-cookie (shape:data msg)))
|
:set-cookie (render-cookie (shape:data msg)))
|
||||||
(actor:stop resp)
|
(render-msg resp nil))
|
||||||
;(finish resp)
|
|
||||||
)
|
|
||||||
|
|
||||||
(defvar *interaction-default-actions*
|
(defvar *default-actions*
|
||||||
(core:define-actions '((:response :set-cookie) set-cookie)
|
(core:define-actions '((:response :set-cookie) set-cookie)
|
||||||
'(nil render-msg)))
|
'(nil render-msg)))
|
||||||
|
|
||||||
|
@ -42,19 +39,17 @@
|
||||||
|
|
||||||
(defvar *html-response-class* nil)
|
(defvar *html-response-class* nil)
|
||||||
|
|
||||||
;(defclass response (core:base-context)
|
(defclass response (core:base-context actor:fg-actor)
|
||||||
(defclass response (core:base-context actor:fg-actor) ; actor:bg-actor
|
|
||||||
((context :reader context :initarg :context)
|
((context :reader context :initarg :context)
|
||||||
(core:actions :initform *interaction-default-actions*)
|
(core:actions :initform *default-actions*)
|
||||||
(env :reader env :initarg :env)
|
(env :reader env :initarg :env)
|
||||||
(messages :accessor messages :initform nil)
|
|
||||||
(headers :accessor headers :initform nil)
|
(headers :accessor headers :initform nil)
|
||||||
(ctype :reader ctype :allocation :class)
|
(ctype :reader ctype :allocation :class)
|
||||||
(responder :accessor responder)
|
(responder :accessor responder)
|
||||||
(writer :accessor writer)))
|
(writer :accessor writer)))
|
||||||
|
|
||||||
(defmethod print-object ((resp response) s)
|
(defmethod print-object ((resp response) s)
|
||||||
(shape:print-fields resp s 'messages))
|
(shape:print-fields resp s))
|
||||||
|
|
||||||
(defgeneric render-content (resp msg))
|
(defgeneric render-content (resp msg))
|
||||||
|
|
||||||
|
@ -93,19 +88,19 @@
|
||||||
(defun make-headers (resp)
|
(defun make-headers (resp)
|
||||||
(cons :content-type (cons (ctype resp) (headers resp))))
|
(cons :content-type (cons (ctype resp) (headers resp))))
|
||||||
|
|
||||||
|
(defun prepare (resp)
|
||||||
|
(let ((headers (make-headers resp))
|
||||||
|
(rcode 200))
|
||||||
|
(setf (writer resp) (funcall (responder resp) (list rcode headers)))))
|
||||||
|
|
||||||
(defun finish (resp)
|
(defun finish (resp)
|
||||||
(let* ((headers (make-headers resp))
|
(funcall (writer resp) nil :close t)
|
||||||
(rcode 200)
|
(actor:stop resp))
|
||||||
(writer (funcall (responder resp) (list rcode headers))) )
|
|
||||||
(dolist (msg (messages resp))
|
|
||||||
(funcall writer (render-content resp msg)))
|
|
||||||
(funcall writer nil :close t)))
|
|
||||||
|
|
||||||
(defun render (resp)
|
(defun render (resp)
|
||||||
#'(lambda (responder)
|
#'(lambda (responder)
|
||||||
(setf (responder resp) responder)
|
(setf (responder resp) responder)
|
||||||
(actor:start resp)
|
(actor:start resp)))
|
||||||
(finish resp)))
|
|
||||||
|
|
||||||
(defun render-not-found(resp)
|
(defun render-not-found(resp)
|
||||||
(list 404 '(:content-type "text/plain") '("Not found")))
|
(list 404 '(:content-type "text/plain") '("Not found")))
|
||||||
|
|
Loading…
Add table
Reference in a new issue