X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=8sync%2Fsystems%2Factors.scm;h=119f8a40a1256af45eb52221322c961f0229bed9;hb=5985528115e276d273a6a4bb1df57c93cab61f84;hp=1c937c31be7373060f25ca938784e0298e2d9d78;hpb=35aed8c0666eec9b4c7a94065082482f421f46ac;p=8sync.git diff --git a/8sync/systems/actors.scm b/8sync/systems/actors.scm index 1c937c3..119f8a4 100644 --- a/8sync/systems/actors.scm +++ b/8sync/systems/actors.scm @@ -83,8 +83,8 @@ (define %random-state (make-parameter (random-state-from-platform))) -;; Probably bigger than necessary -(define random-number-size (expt 10 50)) +;; Same size as a uuid4 I think... +(define random-number-size (expt 2 128)) (define (big-random-number) (random random-number-size (%random-state))) @@ -201,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" @@ -228,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) @@ -560,25 +560,13 @@ that method for documentation." ;; return the actor id actor-id)) -(define* (hive-create-actor hive actor-class - #:key - (init '()) - id-cookie) +(define* (hive-create-actor hive actor-class #:rest init) (%hive-create-actor hive actor-class - init id-cookie)) - -(define-syntax hive-create-actor* - (syntax-rules () - "Create an instance of actor-class attached to this hive. -Return the new actor's id. + init #f)) -Used internally, and used for bootstrapping a fresh hive. - -Note that actors should generally not call this method directly. -Instead, actors should call create-actor." - ((_ args ... (init-args ...)) - (hive-create-actor args ... - #:init (list init-args ...))))) +(define* (hive-create-actor* hive actor-class id-cookie #:rest init) + (%hive-create-actor hive actor-class + init id-cookie)) ;; TODO: Give actors this instead of the actual hive reference @@ -606,7 +594,7 @@ Instead, actors should call create-actor." 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) + (8sync (%hive-create-actor (actor-hive from-actor) actor-class init #f))) @@ -614,13 +602,14 @@ create-actor*)." "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) + (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-id actor))) + (hash-remove! (hive-actor-registry (actor-hive actor)) + (actor-id actor)))