(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)))
(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"
(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)
;; 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
(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)))
\f