Can save/restore actor table to/from disk.
[actors.git] / actors.scm
index 884920d..1c19346 100644 (file)
@@ -4,15 +4,28 @@
    send-message
    run
    send-and-run
-   trace-enabled)
+   restart
+   enable-trace
+   disable-trace
+   save-actors
+   save-actors-to
+   load-actors
+   load-actors-from)
 
   (import scheme
           (chicken base)
           srfi-69
-          matchable)
+          matchable
+          s11n)
 
   (define trace-enabled #f) ;used for debugging
 
+  (define (enable-trace)
+    (set! trace-enabled #t))
+
+  (define (disable-trace)
+    (set! trace-enabled #f))
+
 
 ;;;
 ;;; Actor creation
 
   (define (send-and-run actor . message)
     (apply send-message (cons actor message))
-    (run)))
+    (run))
+
+  (define (restart)
+    (set! message-queue (make-fifo))
+    (set! actor-table (make-hash-table)))
+
+;;;
+;;; Serialization
+;;;
+
+  (define (save-actors-to filename)
+    (with-output-to-file filename
+      (lambda ()
+        (serialize (hash-table->alist actor-table)))))
+
+  (define (save-actors)
+    (save-actors-to "image"))
+
+  (define (load-actors-from filename)
+    (set! actor-table
+      (alist->hash-table (with-input-from-file filename deserialize))))
+
+  (define (load-actors)
+    load-actors-from "image"))