X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;ds=sidebyside;f=8sync%2Fsystems%2Factors.scm;h=55966f531eba60af75edd83b17b1ca8feb0e9295;hb=refs%2Fheads%2Fwip-actors;hp=8f00d570d9f5880d901a6063334e59e047d3f4d0;hpb=5b3a0e8de367ddff6b132aa92e7786bc31cede4b;p=8sync.git diff --git a/8sync/systems/actors.scm b/8sync/systems/actors.scm index 8f00d57..55966f5 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 @@ -198,7 +201,7 @@ If key not found and DFLT not provided, throw an error." (message (make-message (hive-gen-message-id hive) to-id (actor-id from-actor) action (kwarg-list-to-alist message-body-args)))) - (8sync (hive-process-message hive message)))) + (8sync-nowait (hive-process-message hive message)))) (define (send-message-wait from-actor to-id action . message-body-args) "Send a message from an actor to another, but wait until we get a response" @@ -225,7 +228,7 @@ If key not found and DFLT not provided, throw an error." (actor-id from-actor) '*reply* (kwarg-list-to-alist message-body-args) #:in-reply-to (message-id original-message)))) - (8sync (hive-process-message hive new-message)))) + (8sync-nowait (hive-process-message hive new-message)))) (define (reply-message-wait from-actor original-message . message-body-args) @@ -590,6 +593,37 @@ 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) actor-class + 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) actor-class + init id-cookie))) + + +(define (self-destruct actor) + "Remove an actor from the hive." + (hash-remove! (hive-actor-registry (actor-hive actor)) + (actor-id actor))) + + ;;; 8sync bootstrap utilities ;;; =========================