From: Christopher Allan Webber Date: Tue, 26 Apr 2016 15:07:52 +0000 (-0500) Subject: actors: Add actor creation/destruction methods. X-Git-Tag: v0.2.0~39 X-Git-Url: https://jxself.org/git/?p=8sync.git;a=commitdiff_plain;h=35aed8c0666eec9b4c7a94065082482f421f46ac;ds=sidebyside actors: Add actor creation/destruction methods. * 8sync/systems/actors.scm (create-actor, create-actor*, self-destruct): New procedures. --- diff --git a/8sync/systems/actors.scm b/8sync/systems/actors.scm index 8f00d57..1c937c3 100644 --- a/8sync/systems/actors.scm +++ b/8sync/systems/actors.scm @@ -59,6 +59,9 @@ hive-id hive-create-actor hive-create-actor* + create-actor create-actor* + self-destruct + make-message message? message-to message-action message-from @@ -590,6 +593,36 @@ Instead, actors should call create-actor." (hive #:init-keyword #:hive)) + +;;; Various API methods for actors to interact with the system +;;; ========================================================== + +;; TODO: move send-message and friends here...? + +;; TODO: Rewrite this inside of a ? +(define* (create-actor from-actor actor-class #:rest init) + "Create an instance of actor-class. Return the new actor's id. + +This is the method actors should call directly (unless they want +to supply an id-cookie, in which case they should use +create-actor*)." + (8sync (%hive-create-actor (actor-hive from-actor) + init #f))) + + +(define* (create-actor* from-actor actor-class id-cookie #:rest init) + "Create an instance of actor-class. Return the new actor's id. + +Like create-actor, but permits supplying an id-cookie." + (8sync (%hive-create-actor (actor-hive from-actor) + init id-cookie))) + + +(define (self-destruct actor) + "Remove an actor from the hive." + (hash-remove! hive-actor-registry (actor-id actor))) + + ;;; 8sync bootstrap utilities ;;; =========================