actors: Add actor creation/destruction methods.
[8sync.git] / 8sync / systems / actors.scm
index 8f00d570d9f5880d901a6063334e59e047d3f4d0..1c937c31be7373060f25ca938784e0298e2d9d78 100644 (file)
@@ -59,6 +59,9 @@
             hive-id
             hive-create-actor hive-create-actor*
 
+            create-actor create-actor*
+            self-destruct
+
             <message>
             make-message message?
             message-to message-action message-from
@@ -590,6 +593,36 @@ Instead, actors should call create-actor."
   (hive #:init-keyword #:hive))
 
 
+\f
+;;; Various API methods for actors to interact with the system
+;;; ==========================================================
+
+;; TODO: move send-message and friends here...?
+
+;; TODO: Rewrite this inside of a <hive-proxy> ?
+(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)))
+
+
 \f
 ;;; 8sync bootstrap utilities
 ;;; =========================