Update copyrights.
[8sync.git] / demos / actors / robotscanner.scm
index 0b32b36251eccc1f3f5f20d364af5b43e88b8418..7ed6dd2f23c0c5dd9eabecc7d87a5cd6222aef6c 100644 (file)
@@ -1,5 +1,5 @@
 ;;; 8sync --- Asynchronous programming for Guile
-;;; Copyright (C) 2016 Christopher Allan Webber <cwebber@dustycloud.org>
+;;; Copyright © 2016, 2017 Christopher Allan Webber <cwebber@dustycloud.org>
 ;;;
 ;;; This file is part of 8sync.
 ;;;
     (5 0)
     (2 1)))
 
-(define-simple-actor <overseer>
-  (init-world
-   (lambda (actor message)
-     ;; Porting mostly straight up from super-imperative XUDD code.
-     (define previous-room #f)
-     (define first-room #f)
-
-     ;; Set up all rooms
-     (for-each
-      (match-lambda
-        ((clean-droids infected-droids)
-         ;; Create this room
-         (define room (create-actor* actor <warehouse-room> "room"))
-         (define* (init-droid #:key infected)
-           (define droid (create-actor* actor <droid> "droid"
-                                        #:infected infected
-                                        #:room room))
-           (<-wait droid 'register-with-room))
-
-         ;; Link rooms.
-         ;; Couldn't this just be folded into the warehouse room init?
-         ;; I guess it stress tests more the message sending process
-         (when previous-room
-           (<- previous-room 'set-next-room
-               #:id room)
-           (<- room 'set-previous-room
-               #:id previous-room))
-
-         ;; Set up clean droids in the room
-         (for-each
-          (lambda _
-            (init-droid #:infected #f))
-          (iota clean-droids))
-
-         ;; Set up infected droids in the room
-         (for-each
-          (lambda _
-            (init-droid #:infected #t))
-          (iota clean-droids))
-
-         (set! previous-room room)
-         (if (not first-room)
-             (set! first-room room))))
-      room-structure)
-
-     ;; Add security robot
-     (let ((security-robot
-            (create-actor actor <security-robot>)))
-       (<- security-robot 'begin-mission
-           #:starting-room first-room
-           #:overseer (actor-id actor)))))
-
-  (transmission
-   (lambda* (actor message #:key text)
-     (display text)
-     (newline))))
+(define-actor <overseer> (<actor>)
+  ((init-world
+    (lambda (actor message)
+      ;; Porting mostly straight up from super-imperative XUDD code.
+      (define previous-room #f)
+      (define first-room #f)
+
+      ;; Set up all rooms
+      (for-each
+       (match-lambda
+         ((clean-droids infected-droids)
+          ;; Create this room
+          (define room (create-actor* actor <warehouse-room> "room"))
+          (define* (init-droid #:key infected)
+            (define droid (create-actor* actor <droid> "droid"
+                                         #:infected infected
+                                         #:room room))
+            (<-wait droid 'register-with-room))
+
+          ;; Link rooms.
+          ;; Couldn't this just be folded into the warehouse room init?
+          ;; I guess it stress tests more the message sending process
+          (when previous-room
+            (<- previous-room 'set-next-room
+                #:id room)
+            (<- room 'set-previous-room
+                #:id previous-room))
+
+          ;; Set up clean droids in the room
+          (for-each
+           (lambda _
+             (init-droid #:infected #f))
+           (iota clean-droids))
+
+          ;; Set up infected droids in the room
+          (for-each
+           (lambda _
+             (init-droid #:infected #t))
+           (iota clean-droids))
+
+          (set! previous-room room)
+          (if (not first-room)
+              (set! first-room room))))
+       room-structure)
+
+      ;; Add security robot
+      (let ((security-robot
+             (create-actor actor <security-robot>)))
+        (<- security-robot 'begin-mission
+            #:starting-room first-room
+            #:overseer (actor-id actor)))))
+
+   (transmission
+    (lambda* (actor message #:key text)
+      (display text)
+      (newline)))))
 
 
 ;;; A room full of robots.
 
 
 ;;; Security robot... designed to seek out and destroy infected droids.
-(define-simple-actor <security-robot>
-  (begin-mission security-robot-begin-mission))
+(define-actor <security-robot> (<actor>)
+  ((begin-mission security-robot-begin-mission)))
 
 (define* (security-robot-begin-mission actor message
                                        #:key starting-room overseer)
                        (address-actor-id room)))
 
     ;; Find all droids in this room and exterminate the infected ones.
-    (msg-receive (_ #:key list-droids droid-ids #:allow-other-keys)
+    (mbody-receive (_ #:key list-droids droid-ids #:allow-other-keys)
         (<-wait room 'list-droids)
       (for-each
        (lambda (droid-id)
          (cond
           ;; Looks like it's infected
-          ((msg-val (<-wait droid-id 'infection-expose))
+          ((mbody-val (<-wait droid-id 'infection-expose))
            ;; Inform that it's infected
            (<- overseer 'transmission
                #:text (format #f "~a found to be infected... taking out"
            ;; Keep firing till it's dead.
            (let ((still-alive #t))
              (while still-alive
-               (msg-receive (response #:key alive #:allow-other-keys)
+               (mbody-receive (response #:key alive #:allow-other-keys)
                    (<-wait droid-id 'get-shot)
                  (<- overseer 'transmission
                      #:text (droid-status-format response))
        droid-ids))
 
     ;; Switch to next room, if there is one.
-    (set! room (msg-val (<-wait room 'get-next-room))))
+    (set! room (mbody-val (<-wait room 'get-next-room))))
 
   ;; Good job everyone!  Shut down the operation.
   (<- overseer 'transmission