From 367f5ae5894b7babf4e025233cc21fd126965efb Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Tue, 11 Jun 2024 22:37:42 +0200 Subject: [PATCH] first simple setup of printer service receiving message --- core/core.lisp | 26 +++++++++++++++++++++----- test/test-core.lisp | 7 ++++--- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/core/core.lisp b/core/core.lisp index 39f96c5..49d2f84 100644 --- a/core/core.lisp +++ b/core/core.lisp @@ -5,16 +5,21 @@ (:local-nicknames (:config :scopes/config)) (:export #:config #:service-config #:message - #:context #:name #:send)) + #: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) @@ -24,15 +29,26 @@ (timestamp) (data))) +;;;; context + (defclass context () - ((name :reader name :initarg :name))) + ((name :reader name :initarg :name) + (action-handlers :accessor action-handlers :initform nil))) (defgeneric send (rcvr msg) (:method ((rcvr context) msg) - rcvr - 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 'context :name name)) + (make-instance 'printer :name name)) diff --git a/test/test-core.lisp b/test/test-core.lisp index cbeab03..1c6e9f2 100644 --- a/test/test-core.lisp +++ b/test/test-core.lisp @@ -14,8 +14,9 @@ (defvar *config* nil) (defclass test-suite (t:test-suite) - ((receiver :initform (make-instance 'core:context :name :test-rcvr) - :reader receiver))) + ((receiver :reader receiver + :initform (core:printer :test-rcvr)))) + ;:initform (make-instance 'core:context :name :test-rcvr)))) (defun run () (let ((*config* nil) @@ -26,7 +27,7 @@ (t:deftest test-send () (let ((rcvr (receiver t:*test-suite*)) - (msg nil)) + (msg "dummy message")) (== (core:name rcvr) :test-rcvr) (core:send rcvr msg) ))