2016-07-10 16:33:16 +00:00
|
|
|
#lang syndicate/actor
|
2016-02-29 15:24:25 +00:00
|
|
|
;; Toy file system, based on the example in the ESOP2016 submission.
|
2016-04-01 23:53:46 +00:00
|
|
|
;; syndicate/actor implementation, using "during" instead of "on asserted/until retracted".
|
2016-02-29 15:24:25 +00:00
|
|
|
|
2016-07-31 16:17:12 +00:00
|
|
|
(require/activate "fs-shell.rkt")
|
|
|
|
(require/activate "fs-protocol.rkt")
|
2016-02-29 15:24:25 +00:00
|
|
|
|
2016-07-09 20:18:30 +00:00
|
|
|
(actor (react (field [files (hash)])
|
|
|
|
(during (observe (file $name _))
|
|
|
|
(on-start (printf "At least one reader exists for ~v\n" name))
|
|
|
|
(on-stop (printf "No remaining readers exist for ~v\n" name))
|
|
|
|
(field [content (hash-ref (files) name #f)])
|
|
|
|
(assert (file name (content)))
|
|
|
|
(on (message (save (file name $new-content))) (content new-content))
|
|
|
|
(on (message (delete name)) (content #f)))
|
|
|
|
(on (message (save (file $name $content))) (files (hash-set (files) name content)))
|
|
|
|
(on (message (delete $name)) (files (hash-remove (files) name)))))
|