src/middleware/core.lisp @ 743c0a981785
Oh boy, here we go...
Finally getting back to poking at this. Apparently my Common Lisp has gotten
better in the past six months because good lord this code looks bad now.
Anyway, a few changes:
* Make it run on CCL by working around a usocket bug.
* Remove the workaround hacks. It's never gonna work with Fireplace anyway.
* Make the socket stream once instead of on every read/write so the GC doesn't hate us.
author |
Steve Losh <steve@stevelosh.com> |
date |
Sat, 09 Apr 2016 20:42:34 +0000 |
parents |
dcaf8468adb1 |
children |
3e9db801d234 |
(in-package #:nrepl)
(defvar *middleware* (fset:empty-map))
(defmacro handle-op (message op fallback &rest body)
`(if (equal ,op (fset:lookup ,message "op"))
(progn ,@body)
(funcall ,fallback ,message)))
(defmacro define-middleware (name op message-binding &rest body)
(let ((fallback (gensym)))
`(defun ,name (,fallback)
(lambda (,message-binding)
(handle-op ,message-binding ,op ,fallback
,@body)))))