X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=actors.git;a=blobdiff_plain;f=actors.scm;h=fc266a33d0f3601cdc83c0745fe619fe5ed130d7;hp=884920de5ea5388cf6df6ce5d0ec56b68e0331d9;hb=HEAD;hpb=f24d784945aa108bc579ce5bd777dc17361bcb6f diff --git a/actors.scm b/actors.scm index 884920d..1c19346 100644 --- a/actors.scm +++ b/actors.scm @@ -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 @@ -139,4 +152,27 @@ (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"))