move code for keeping services running to scopes/core
This commit is contained in:
parent
7a838af162
commit
7628cd7e49
5 changed files with 23 additions and 22 deletions
|
@ -13,23 +13,8 @@
|
|||
|
||||
(in-package :scopes/app/demo)
|
||||
|
||||
(defvar *quit-queue* (lparallel.queue:make-queue :fixed-capacity 1))
|
||||
|
||||
(defun main()
|
||||
;(setf (trivial-signal:signal-handler :int) #'quit-handler)
|
||||
;(setf (trivial-signal:signal-handler :term) #'quit-handler)
|
||||
(let ((config-path (util:relative-path "config" "etc")))
|
||||
(format t "~%Hello World.~%config-path: ~s~%" config-path)
|
||||
(load config-path))
|
||||
(unwind-protect
|
||||
(progn
|
||||
(core:setup-services)
|
||||
;(setf forge:*forge-env* (forge:forge-env))
|
||||
;(forge:setup-builtins)
|
||||
;(forge:repl)
|
||||
(lparallel.queue:pop-queue *quit-queue*))
|
||||
(core:shutdown)))
|
||||
|
||||
(defun quit-handler (sig)
|
||||
(format t "~%quit-handler: got signal ~s~%" sig)
|
||||
(lparallel.queue:push-queue sig))
|
||||
(core:run-services))
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
:version "0.0.1"
|
||||
:homepage "https://www.cyberconcepts.org"
|
||||
:description ""
|
||||
:depends-on (:scopes :lparallel :trivial-signal)
|
||||
:depends-on (:scopes)
|
||||
:components ((:file "main"))
|
||||
:build-operation "program-op"
|
||||
:build-pathname "bin/demo"
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
(:alx :alexandria))
|
||||
(:export #:action-spec #:define-actions
|
||||
#:*root* #:default-setup #:default-actions
|
||||
#:find-service #:setup-services
|
||||
#:base-context #:context #:add-action #:config #:name #:send #:shutdown
|
||||
#:find-service #:run-services #:setup-services #:shutdown
|
||||
#:base-context #:context #:add-action #:config #:name #:send
|
||||
#:handle-message
|
||||
#:do-print #:echo))
|
||||
|
||||
|
@ -52,10 +52,15 @@
|
|||
(if (equal (pattern a) pat)
|
||||
(return-from find-action a))))
|
||||
|
||||
;;;; context
|
||||
;;;; context, services
|
||||
|
||||
(defvar *root* nil)
|
||||
|
||||
(defvar *quit-queue* (lparallel.queue:make-queue :fixed-capacity 1))
|
||||
(defun quit-handler (sig)
|
||||
(format t "~%quit-handler: got signal ~s~%" sig)
|
||||
(lparallel.queue:push-queue sig))
|
||||
|
||||
(defclass base-context ()
|
||||
((actions :accessor actions :initform nil)
|
||||
(default-actions :reader default-actions :initform nil)))
|
||||
|
@ -75,6 +80,8 @@
|
|||
|
||||
(defun setup-services (&optional (cfg config:*root*))
|
||||
(setf *root* (make-instance 'context :config cfg))
|
||||
;(setf (trivial-signal:signal-handler :int) #'quit-handler)
|
||||
;(setf (trivial-signal:signal-handler :term) #'quit-handler)
|
||||
(dolist (c (reverse (config:children cfg)))
|
||||
(add-service *root* c)))
|
||||
|
||||
|
@ -82,6 +89,13 @@
|
|||
(dolist (ctx (alx:hash-table-values (services *root*)))
|
||||
(funcall (config:shutdown (config ctx)) ctx)))
|
||||
|
||||
(defun run-services (&optional (cfg config:*root*))
|
||||
(unwind-protect
|
||||
(progn
|
||||
(setup-services cfg)
|
||||
(lparallel.queue:pop-queue *quit-queue*))
|
||||
(shutdown)))
|
||||
|
||||
(defun add-action (ctx pat hdlr)
|
||||
(let* ((acts (actions ctx))
|
||||
(act (find-action pat acts)))
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
:homepage "https://www.cyberconcepts.org"
|
||||
:description "Core packages of the scopes project."
|
||||
:depends-on (:alexandria :cl-dotenv :com.inuoe.jzon
|
||||
:flexi-streams :ironclad :local-time :log4cl :qbase64 :str)
|
||||
:flexi-streams :ironclad :local-time :log4cl
|
||||
:lparallel :qbase64 :str :trivial-signal)
|
||||
:components ((:file "config" :depends-on ("util/util"))
|
||||
(:file "core/core"
|
||||
:depends-on ("core/message" "config"
|
||||
|
|
|
@ -59,7 +59,8 @@
|
|||
ctx))
|
||||
|
||||
(defun stop (ctx)
|
||||
(clack:stop (listener ctx)))
|
||||
(clack:stop (listener ctx))
|
||||
(util:lgi))
|
||||
|
||||
(defun select-app (ctx env)
|
||||
(let ((path (cdr (str:split "/" (getf env :path-info)))))
|
||||
|
|
Loading…
Add table
Reference in a new issue