web/server: work in progress: render response
This commit is contained in:
		
							parent
							
								
									3b98c9cc54
								
							
						
					
					
						commit
						5d27e99bb7
					
				
					 1 changed files with 15 additions and 16 deletions
				
			
		|  | @ -87,16 +87,13 @@ | ||||||
|     (log:debug "msg ~s" msg) |     (log:debug "msg ~s" msg) | ||||||
|     ; (check-auth ctx msg env) => (render-unauthorized ctx msg env) |     ; (check-auth ctx msg env) => (render-unauthorized ctx msg env) | ||||||
|     (if (core:handle-message ctx msg) |     (if (core:handle-message ctx msg) | ||||||
|       ;(render ctx (message resp) env) |       (render ctx (message resp) env) | ||||||
|       (list 200 (headers resp) (list (body resp))) |       (render-not-found ctx env)))) | ||||||
|       (list 404 '(:content-type "text/plain") '("Not found"))))) |  | ||||||
|       ;(render-not-found ctx env) |  | ||||||
| 
 | 
 | ||||||
| ;;;; server response - provide response data for rendering body and headers | ;;;; server response - provide response data and render body and headers | ||||||
| 
 | 
 | ||||||
| (defclass response () | (defclass response () | ||||||
|   ((message :accessor message :initform nil) |   ((message :accessor message :initform nil))) | ||||||
|    (headers :accessor headers :initform '(:content-type "text/plain")))) |  | ||||||
| 
 | 
 | ||||||
| (defmethod print-object ((r response) s) | (defmethod print-object ((r response) s) | ||||||
|   (format s "<response ~s>" (message r))) |   (format s "<response ~s>" (message r))) | ||||||
|  | @ -105,16 +102,18 @@ | ||||||
|   (log:debug "receiving ~s" msg) |   (log:debug "receiving ~s" msg) | ||||||
|   (setf (message r) msg)) |   (setf (message r) msg)) | ||||||
| 
 | 
 | ||||||
| (defgeneric body (r) |  | ||||||
|   (:method ((r response)) |  | ||||||
|     (getf (message:data (message r)) :info))) |  | ||||||
| 
 |  | ||||||
| (defun render (ctx msg env) | (defun render (ctx msg env) | ||||||
|   ; process special message headers, e.g. (:system :error ...) |   (let ((headers '(:content-type "text/plain")) | ||||||
|   ;   => set status code, provide additional data elements |         (rcode 200) | ||||||
|   ; (gethash "accept" (getf env :headers)) => select output format |         (content (getf (message:data msg) :info))) | ||||||
|   ; set headers, render body |     ; process special message heads, e.g. (:system :error ...) | ||||||
|   ) |     ;   => set status code, provide additional data elements | ||||||
|  |     ; (gethash "accept" (getf env :headers)) => select output format | ||||||
|  |     ; set headers, render body | ||||||
|  |     (list rcode headers (list content)))) | ||||||
|  | 
 | ||||||
|  | (defun render-not-found(ctx env) | ||||||
|  |   (list 404 '(:content-type "text/plain") '("Not found"))) | ||||||
| 
 | 
 | ||||||
| ;;;; helper functions | ;;;; helper functions | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue