From f8f472befbca280fe63848d37595fc6ff327ba92 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Mon, 31 Jul 2017 10:56:35 -0500 Subject: [PATCH] Add daydream.scm and re-enable some files in Makefile.am. * 8sync/daydream.scm: New file. * Makefile.am (SOURCES): Adjust for modules which currently do compile. --- 8sync/daydream.scm | 43 +++++++++++++++++++++++++++++++++++++++++++ Makefile.am | 9 +++++---- 2 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 8sync/daydream.scm diff --git a/8sync/daydream.scm b/8sync/daydream.scm new file mode 100644 index 0000000..291d010 --- /dev/null +++ b/8sync/daydream.scm @@ -0,0 +1,43 @@ +;;; 8sync --- Asynchronous programming for Guile +;;; Copyright © 2017 Christopher Allan Webber +;;; +;;; This file is part of 8sync. +;;; +;;; 8sync is free software: you can redistribute it and/or modify it +;;; under the terms of the GNU Lesser General Public License as +;;; published by the Free Software Foundation, either version 3 of the +;;; License, or (at your option) any later version. +;;; +;;; 8sync is distributed in the hope that it will be useful, +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU Lesser General Public License for more details. +;;; +;;; You should have received a copy of the GNU Lesser General Public +;;; License along with 8sync. If not, see . + +(define-module (8sync daydream) + #:use-module (8sync) + #:use-module (fibers) + #:export (daydream)) + +;;; Daydreaming is a lot like sleeping, except it doesn't block other +;;; message correspondence. + +(define-actor () + ((dream daydreamer-dream))) + +(define (daydreamer-dream daydreamer message + secs) + (sleep secs) + ;; We're a single use actor, so we blow up + (self-destruct daydreamer) + ;; Now reply to the actor's continuation + 'wake-up) + +;; TODO: don't require the actor here +(define (daydream secs) + (define dreamer + (create-actor ((@@ (8sync actors) *current-actor*)) + )) + (<-wait dreamer 'dream secs)) diff --git a/Makefile.am b/Makefile.am index 2cbd695..196e863 100644 --- a/Makefile.am +++ b/Makefile.am @@ -47,15 +47,16 @@ godir=$(libdir)/guile/2.2/ccache SOURCES = \ 8sync.scm \ 8sync/actors.scm \ - 8sync/inbox.scm -# 8sync/repl.scm \ + 8sync/daydream.scm \ + 8sync/inbox.scm \ + 8sync/repl.scm \ + 8sync/rmeta-slot.scm \ + 8sync/systems/irc.scm # 8sync/agenda.scm \ # 8sync/debug.scm \ # 8sync/ports.scm \ -# 8sync/rmeta-slot.scm \ # 8sync/contrib/base64.scm \ # 8sync/contrib/sha-1.scm \ -# 8sync/systems/irc.scm \ # 8sync/systems/web.scm \ # 8sync/systems/websocket.scm \ # 8sync/systems/websocket/client.scm \ -- 2.31.1