simple message set-up, + print method

This commit is contained in:
Helmut Merz 2024-06-12 11:29:51 +02:00
parent 645f008362
commit 5b48306ccf
5 changed files with 41 additions and 16 deletions

View file

@ -4,7 +4,6 @@
(:use :common-lisp)
(:local-nicknames (:config :scopes/config))
(:export #:config #:service-config
#:message
#:context #:name #:send
#:printer))
@ -18,17 +17,6 @@
(defclass service-config (config:base)
(start))
;;;; message
(defclass message ()
((domain)
(action)
(class)
(item)
(sender)
(timestamp)
(data)))
;;;; actions
(defclass action-spec ()
@ -44,9 +32,9 @@
(defgeneric send (rcvr msg)
(:method ((rcvr context) msg)
(let* ((acts (actions rcvr))
(selected (car acts))
(hdlr (car (handlers selected))))
(funcall hdlr msg))))
(selected (car acts)))
(dolist (hdlr (handlers selected))
(funcall hdlr msg)))))
(defvar *context* nil)

33
core/message.lisp Normal file
View file

@ -0,0 +1,33 @@
;;;; cl-scopes/core/message
(defpackage :scopes/core/message
(:use :common-lisp)
(:local-nicknames (:core :scopes/core))
(:export #:message #:simple-message
#:data))
(in-package :scopes/core/message)
(defclass message-head ()
((domain)
(action)
(class)
(item)))
(defclass message ()
((head :reader head :initarg :head)
(sender)
(timestamp)
(data :accessor data :initform nil)))
(defun simple-message (&rest head-vals)
(let ((h (make-instance 'message-head)))
(dolist (sl '(domain action class item))
(setf (slot-value h sl) (pop head-vals)))
(make-instance 'message :head h)))
(defmethod print-object ((msg message) stream)
(with-slots (domain action class item) (head msg)
(format stream
"~&<message (~a ~a ~a ~a) <data ~s>>~%"
domain action class item (data msg))))

View file

@ -9,6 +9,7 @@
:depends-on (:alexandria :cl-dotenv :com.inuoe.jzon :local-time :log4cl :str)
:components ((:file "config" :depends-on ("util"))
(:file "core/core" :depends-on ("config" "forge/forge" "util"))
(:file "core/message" :depends-on ("core/core"))
(:file "forge/forge")
(:file "util")
(:file "testing" :depends-on ("util"))

View file

@ -10,6 +10,7 @@
:local-time :log4cl :str :sxql)
:components ((:file "config" :depends-on ("util"))
(:file "core/core" :depends-on ("config" "forge/forge" "util"))
(:file "core/message" :depends-on ("core/core"))
(:file "forge/forge")
(:file "storage/storage")
(:file "storage/tracking" :depends-on ("storage/storage"))

View file

@ -4,6 +4,7 @@
(:use :common-lisp)
(:local-nicknames (:config :scopes/config)
(:core :scopes/core)
(:message :scopes/core/message)
(:util :scopes/util)
(:t :scopes/testing))
(:export #:run #:user #:password)
@ -27,7 +28,8 @@
(t:deftest test-send ()
(let ((rcvr (receiver t:*test-suite*))
(msg "dummy message"))
(msg (message:simple-message :test :dummy)))
(setf (message:data msg) "dummy payload")
(== (core:name rcvr) :test-rcvr)
(core:send rcvr msg)
))