cl-scopes/core/core.lisp

54 lines
1 KiB
Common Lisp

;;;; cl-scopes/core - here comes the real action
(defpackage :scopes/core
(:use :common-lisp)
(:local-nicknames (:config :scopes/config))
(:export #:config #:service-config
#:message
#:context #:name #:send
#:printer))
(in-package :scopes/core)
;;;; config
(defclass config (config:root)
(services))
(defclass service-config (config:base)
(start))
;;;; message
(defclass message ()
((domain)
(action)
(class)
(item)
(sender)
(timestamp)
(data)))
;;;; context
(defclass context ()
((name :reader name :initarg :name)
(action-handlers :accessor action-handlers :initform nil)))
(defgeneric send (rcvr msg)
(:method ((rcvr context) msg)
(let ((hdlrs (action-handlers rcvr)))
(funcall (car hdlrs) msg))))
(defvar *context* nil)
;;;; simple printer service
(defun do-print (msg)
(format t "~&~s~%" msg))
(defclass printer (context)
((action-handlers :initform (list #'do-print))))
(defun printer (name)
(make-instance 'printer :name name))