Add thread safe queue. Use to push updates to client.
[eow] / web.lisp
index 763b6f3a46621d7698aa0daa576fcb3b961060bf..40b74066ca506a21ff2c3e9fe1617c6bdf8e9ae8 100644 (file)
--- a/web.lisp
+++ b/web.lisp
          (fullname (concatenate 'string +static-files-root+ fname)))
     (handle-static-file fullname)))
 
+(defvar *update-queue* (locked-queue:create))
+
+(defun update ()
+  "Send stream of updates to client"
+  (locked-queue:dequeue *update-queue*))
+
 (defun dispatch (request)
   (let ((script-name (script-name request)))
     (cond
       ((not (string-starts-with script-name +web-root+)) nil) ; do not handle this request
+      ((string= script-name "/eow/update") 'update)
       ((or (string-equal script-name +web-root-base+)
            (string-equal script-name +web-root+)) (redirect +root-url+)) ; go to the start page
       ((string-starts-with script-name +static-web-root+) 'serve-static)))) ; serve static file