Janneke Nieuwenhuizen [Tue, 15 Aug 2023 08:16:58 +0000 (10:16 +0200)]
irc: Make irc-bot-init, irc-bot-cleanup methods.
A bot likely needs to override these.
* 8sync/systems/irc.scm (irc-bot-init, irc-bot-cleanup): Change
procedures to methods.
Janneke Nieuwenhuizen [Thu, 17 Aug 2023 07:49:22 +0000 (09:49 +0200)]
demos: irc-bot: Refactor message handling using new handle-message.
* demos/ircbot.scm (handle-line): Rename to...
(handle-message): ...this, and refactor.
* doc/8sync.texi (An intermission on live hacking): Update
accordingly.
Janneke Nieuwenhuizen [Sun, 13 Aug 2023 09:18:12 +0000 (11:18 +0200)]
irc: Refactor using (8sync contrib irc) library from Snuik.
Switch to new IRC library while retaining 0.4.2 api compatibility.
* 8sync/systems/irc.scm: Rewrite using low level irc functions
from (8sync contrib irc).
(irc-socket-setup): Remove,
(<irc-bot>): Update to use %irc:default-port. Add dispatch-message
handler.
(irc-bot-init): Refactor using irc:listen, irc:user, irc:nick.
(irc-bot-main-loop): Dispatch to...
(dispatch-message): ...this new message handler.
(handle-message): New overridable handler. Invoke legacy
handle-misc-input and handle-line handlers for PRIVMSG.
Janneke Nieuwenhuizen [Thu, 17 Aug 2023 08:26:46 +0000 (10:26 +0200)]
demos: ircbot: Do not assume /usr/bin/guile.
* demos/ircbot.scm: Use /usr/bin/env shebang.
Janneke Nieuwenhuizen [Sat, 12 Aug 2023 20:40:05 +0000 (22:40 +0200)]
Import (8sync contrib irc) library from Snuik.
Snuik was created using 8sync, imported (8sync contrib irc) to
override it locally for Snuik, refactored parsing, moved irc
procedures out to this library.
* 8sync/contrib/irc.scm: New file.
* Makefile.am (SOURCES): Add it.
Janneke Nieuwenhuizen [Fri, 11 Aug 2023 11:37:55 +0000 (13:37 +0200)]
irc: Avoid connecting to #f socket, attempt reconnect.
* 8sync/systems/irc.scm (irc-socket-setup): Only connect to a valid
socket. Retry if connecting fails.
Janneke Nieuwenhuizen [Sun, 13 Aug 2023 08:39:25 +0000 (10:39 +0200)]
irc: Log to standard error.
* 8sync/systems/irc.scm (echo-message): Add #:port parameter.
(handle-line): Use it to echo to stderr.
Janneke Nieuwenhuizen [Thu, 17 Aug 2023 08:24:10 +0000 (10:24 +0200)]
guix: Update instructions with guix shell.
* guix.scm: Replace guix environment comment with guix shell.
Rutger van Beusekom [Wed, 18 Nov 2020 15:12:28 +0000 (16:12 +0100)]
websocket: Queue fragmented frames to avoid interleaving.
* 8sync/systems/websocket/client.scm (<websocket>)[frames]: New slot.
(websocket-send): Use it to queue fragmented frames.
Acked-by: Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
Jan (janneke) Nieuwenhuizen [Sun, 8 Nov 2020 07:30:39 +0000 (08:30 +0100)]
websocket: Gracefully handle read errors and socket close.
* 8sync/systems/websocket/client.scm (websocket-socket-open?): New
method.
(websocket-loop): Use it to gracefully handle errors socket close.
Jan (janneke) Nieuwenhuizen [Fri, 30 Oct 2020 14:01:30 +0000 (15:01 +0100)]
mingw: Hack for missing /dev/urandom.
* 8sync/systems/websocket/client.scm (open-entropy-port): Add hack for
missing /dev/urandom.
Jan (janneke) Nieuwenhuizen [Fri, 30 Oct 2020 14:00:39 +0000 (15:00 +0100)]
mingw: Avoid SIGPIPE.
* 8sync/systems/web.scm (initialize): Only set SIGPIPE if it is
available.
Jan (janneke) Nieuwenhuizen [Sat, 7 Nov 2020 09:45:32 +0000 (10:45 +0100)]
agenda: Handle wrong-type-arg in select.
This fixes
Backtrace:
10 (apply-smob/1 #<catch-closure
7fca5dcad920>)
In ice-9/boot-9.scm:
705:2 9 (call-with-prompt _ _ #<procedure default-prompt-handler (k proc)>)
In ice-9/eval.scm:
619:8 8 (_ #(#(#<directory (guile-user)
7fca5d93f140>)))
In ice-9/boot-9.scm:
2312:4 7 (save-module-excursion _)
3832:12 6 (_)
In 8sync/actors.scm:
812:6 5 (run-hive #<<hive>
7fca5d977190> _ #:cleanup _ #:handle-signals _)
In ice-9/control.scm:
91:24 4 (call-with-escape-continuation _)
In 8sync/agenda.scm:
569:6 3 (run-agenda #<<agenda> queue: (() . #f) prompt-tag: ("prompt") read-port-map: #<hash-table 7fca5…> …)
470:7 2 (update-agenda-from-select! #<<agenda> queue: (() . #f) prompt-tag: ("prompt") read-port-map: #<h…>)
In ice-9/boot-9.scm:
829:9 1 (catch system-error #<procedure
7fca5bf1ab70 at 8sync/agenda.scm:471:9 ()> #<procedure
7fca5cd09…> …)
In unknown file:
0 (select (#<closed: file
7fca5b077380> #<input-output: socket 11>) (#<closed: file
7fca5b077380>) # …)
ERROR: In procedure select:
In procedure select: Wrong type argument in position 1: #<closed: file
7fca5b077380>
* 8sync/agenda.scm (update-agenda-from-select!): Catch everything.
Jan (janneke) Nieuwenhuizen [Mon, 22 Apr 2019 17:30:22 +0000 (19:30 +0200)]
websocket: Support for sending fragmented frames.
* 8sync/systems/websocket/frame.scm (make-text-frame): Add keyword
parameters final and continuation.
(make-binary-frame): Likewise.
* 8sync/systems/websocket/client.scm (make-fragmented-frames): New
function.
(websocket-send): Use it to send fragmented frames.
Jan (janneke) Nieuwenhuizen [Mon, 22 Apr 2019 17:03:37 +0000 (19:03 +0200)]
websocket: Initial <websocket> client actor support.
* 8sync/systems/websocket/client.scm (no-op): New procedure.
(<websocket>): Change from record to actor and use it.
(websocket-init): New method.
(set-nonblocking!): New procedure.
(make-client-socket): Use it.
(make-websocket): Rename to...
(websocket-open): ...this new method and change accordingly.
(close-websocket): Rename to ...
(websocket-close): ...this new method and change accordingly.
(handshake, websocket-send, websocket-connecting, websocket-open?,
websocket-closing?, websocket-closed?): Change to method and update
accordingly.
(display-websocket): Move to...
(write)[<websocket]: ...this new specialization.
(set-record-type-printer!): Remove.
(websocket-loop): Renamed from...
* 8sync/systems/websocket/server.scm (websocket-client-loop): ...here.
(make-websocket-actor): New procedure.
(<websocket-server>): Call it for websocket upgrade, create new
<websocket> actor.
* demos/websocket/8s-client.scm,
demos/websocket/8s-server.scm,
demos/websocket/ws-client.js,
demos/websocket/ws-server.js: New files.
* Makefile.am (EXTRA_DIST): Add them.
Jan (janneke) Nieuwenhuizen [Thu, 18 Mar 2021 13:21:28 +0000 (14:21 +0100)]
guix: Use guile-3.0.
* guix.scm (name)[native-inputs]: Remove guile.
[inputs]: New field, add guile-3.0.
Jan (janneke) Nieuwenhuizen [Thu, 18 Mar 2021 13:20:02 +0000 (14:20 +0100)]
websocket: server: Remove .upgrade-paths accessor.
* 8sync/systems/websocket/server.scm (<websocket-server>): Remove
.upgrade-paths accessor. There's a method for doing this.
Jan (janneke) Nieuwenhuizen [Thu, 18 Mar 2021 08:47:24 +0000 (09:47 +0100)]
Support for guile-3.0.5: Move test-exit inside srfi-64 test.
* tests/test-actors.scm,
tests/test-agenda.scm,
tests/test-rmeta-slot.scm (test-exit): Move inside test, where
'test-runner-current' is still set.
Jan Nieuwenhuizen [Tue, 28 Jan 2020 13:08:29 +0000 (14:08 +0100)]
websocket: Oops, avoid looping.
* 8sync/systems/websocket/server.scm (websocket-client-loop): Oops,
avoid looping.
Jan Nieuwenhuizen [Wed, 6 Nov 2019 11:06:45 +0000 (12:06 +0100)]
build: Support cross building.
* configure.ac: Add AC_CANONICAL_HOST to get host.
* Makefile.am (.scm.go): Set it as target.
Jan Nieuwenhuizen [Thu, 31 Oct 2019 14:39:40 +0000 (15:39 +0100)]
build: Prepare for guile 3.
* configure.ac: Check for guile 3.0 too.
* Makefile.am: Install in site-ccache.
Rutger van Beusekom [Fri, 22 Nov 2019 21:36:08 +0000 (22:36 +0100)]
Do not read a frame past EOF.
* 8sync/systems/websocket/frame.scm (read-frame): Handle EOF.
Jan Nieuwenhuizen [Mon, 27 Jan 2020 17:35:12 +0000 (18:35 +0100)]
websocket: Also concatenate last fragmented frame.
* 8sync/systems/websocket/server.scm (websocket-client-loop): Also add
final fragmented frame.
Jan Nieuwenhuizen [Mon, 22 Apr 2019 15:03:45 +0000 (17:03 +0200)]
web server: Treat upgrade requests as case-insensitive.
* 8sync/systems/web.scm (maybe-upgrade-request): Compare using
string-ci=? Fixes upgrade request for "WebSocket".
Jan Nieuwenhuizen [Thu, 18 Apr 2019 05:10:41 +0000 (07:10 +0200)]
doc: Fix initial sleeper.
* doc/8sync.texi (Writing our own actors): Add missing slot to initial
sleeper example.
Jan Nieuwenhuizen [Mon, 22 Apr 2019 16:49:48 +0000 (18:49 +0200)]
guix: Bump to guile-2.2
* guix.scm (name): Bump to 2.2.
Christopher Allan Webber [Sat, 18 Mar 2017 05:54:27 +0000 (00:54 -0500)]
8sync 0.4.2
Christopher Allan Webber [Sat, 18 Mar 2017 05:07:58 +0000 (00:07 -0500)]
Add NEWS for 8sync 0.4.2
Christopher Allan Webber [Tue, 14 Feb 2017 20:16:37 +0000 (14:16 -0600)]
build: guix.scm: Use git-predicate procedure from Guix proper.
* guix.scm: Use git-predicate procedure from Guix to define source.
Christopher Allan Webber [Thu, 9 Feb 2017 21:28:22 +0000 (15:28 -0600)]
web: Remove web-deprecated.scm.
* 8sync/systems/web-deprecated.scm: Removed file.
Christopher Allan Webber [Thu, 9 Feb 2017 20:44:05 +0000 (14:44 -0600)]
websocket: Preventing some eof-object related errors.
* 8sync/systems/websocket/server.scm (websocket-client-loop):
Prevent some errors where eof-objects appear as the frame by
the time we hit the cond.
Christopher Allan Webber [Mon, 30 Jan 2017 05:10:13 +0000 (23:10 -0600)]
actors: Avoid building up stack of error handlers when resuming coroutines.
However it's not clear that we're not still building up a stack of
prompts. :\
* 8sync/actors.scm (hive-process-message): Avoid building up stack of
error handlers when resuming coroutines.
Christopher Allan Webber [Mon, 30 Jan 2017 05:08:22 +0000 (23:08 -0600)]
agenda: Always set sec/usec to exact time.
* 8sync/agenda.scm (delayed-time): Always set sec/usec to exact time.
Christopher Allan Webber [Sun, 29 Jan 2017 22:14:56 +0000 (16:14 -0600)]
rmeta-slot: Rename wrap-rmeta-slot to build-rmeta-slot.
* 8sync/rmeta-slot.scm (build-rmeta-slot): Renamed from wrap-rmeta-slot.
(make-rmeta-slot): Removed.
* 8sync/actors.scm (build-actions): Update caller to build-rmeta-slot.
* tests/test-rmeta-slot.scm: Update tests.
Christopher Allan Webber [Wed, 25 Jan 2017 17:42:20 +0000 (11:42 -0600)]
actors: Switch over to using wrap-rmeta-slot for build-actions.
* 8sync/rmeta-slot.scm (wrap-rmeta-slot): New variable.
* 8sync/actors.scm (build-actions): Switch from using make-rmeta-slot
to using wrap-rmeta-slot.
* doc/8sync.texi (Writing our own actors): Update documentation
to use #:init-thunk.
* 8sync/actors.scm (<actor>, define-actor, <hive>):
* 8sync/systems/irc.scm (<irc-bot>):
* demos/actors/robotscanner.scm (<warehouse-room>, <droid>):
* tests/test-actors.scm (<hi-on-init>):
* tests/test-rmeta-slot.scm (<kah-lassy>, <sub-lassy>): Update to
use #:init-thunk instead of #:init-value on actions slot.
Christopher Allan Webber [Wed, 25 Jan 2017 00:06:58 +0000 (18:06 -0600)]
actors: Use rmeta-slot for actions dispatch.
* 8sync/actors.scm (actor-inheritable-message-handler, build-actions):
Use rmeta-slot tooling for action dispatch.
Christopher Allan Webber [Tue, 24 Jan 2017 23:41:16 +0000 (17:41 -0600)]
rmeta-slot: Make equal? type hash table access the default.
This is the more general case, so we may as well.
* 8sync/rmeta-slot.scm (class-rmeta-ref): Set #:equals?, #:cache-set!,
and #:cache-ref all to equal? type access rather than eq? by default.
Christopher Allan Webber [Tue, 24 Jan 2017 23:27:14 +0000 (17:27 -0600)]
rmeta-slot: New module for recursive meta-slot access.
This is an abstraction around the core idea driving the actor actions
system. It turns out I need this abstraction for mudsync as well, so
I'm breaking it out. Pleasantly, it should be much faster now, since
a cache is built for each class regarding what key should resolve to
what value.
* 8sync/rmeta-slot.scm:
* tests/test-rmeta-slot.scm: New modules.
* Makefile.am: Add them.
Christopher Allan Webber [Tue, 24 Jan 2017 17:19:57 +0000 (11:19 -0600)]
websocket: Adding myself to server copyright lines.
* 8sync/systems/websocket/server.scm: Adjust copyright lines.
Christopher Allan Webber [Sun, 15 Jan 2017 00:24:34 +0000 (18:24 -0600)]
websockets: Initial websocket support.
* 8sync/contrib/base64.scm:
* 8sync/contrib/sha-1.scm:
* 8sync/ports.scm:
* 8sync/systems/websocket.scm:
* 8sync/systems/websocket/client.scm:
* 8sync/systems/websocket/frame.scm:
* 8sync/systems/websocket/server.scm:
* 8sync/systems/websocket/utils.scm: New files.
* Makefile.am (SOURCES): Add them.
* 8sync/systems/web.scm (<web-server>): Rename upgrade slot to
upgrade-paths and use it.
(.upgrade-paths, maybe-upgrade-request): New variables.
(web-server-client-loop): Upgrade protocol if appropriate.
Christopher Allan Webber [Sat, 21 Jan 2017 06:53:48 +0000 (00:53 -0600)]
actors: Allow actors to specify whether to handle an *init* action.
* 8sync/actors.scm (<actor>): New should-init slot.
(hive-handle-init-all, %hive-create-actor): Respect 'should-init slot.
Christopher Allan Webber [Fri, 20 Jan 2017 23:58:20 +0000 (17:58 -0600)]
actors: Don't reply to a message when the messsage doesn't need a reply.
* 8sync/actors.scm (<-reply, <-reply*, <-reply-wait, <-reply-wait*):
Only reply to messages if they're waiting on a reply still.
This avoids the challenges of actors never having requested a
reply in the first place resulting in trying to resume a waiting
coroutine that doesn't exist, as well as maybe the bonus one of not
replying multiple times to a message.
Christopher Allan Webber [Thu, 19 Jan 2017 17:10:08 +0000 (11:10 -0600)]
repl: Publish notification about repl updates to subscribers.
* 8sync/repl.scm (<repl-manager>): Convert to use define-class.
Switch all getters accessors from `repl-manager-' prefix to
dot-prefix.
Add subscribers slot.
Add action handlers for add-subscriber and remove-subscriber.
(repl-manager-cleanup, repl-manager-init): Use dot-prefix
getters/accessors.
(repl-manager-init): Update to inform subscribers after every time
we poll the REPL.
(repl-manager-add-subscriber, repl-manager-remove-subscriber): New
procedures.
Christopher Allan Webber [Sun, 15 Jan 2017 15:29:16 +0000 (09:29 -0600)]
web: Rename getters / accessors to use dot prefix.
* 8sync/systems/web.scm (<web-server>, .host, .family, .port-num)
(.addr, .socket, .http-handler): Rename getters/accessors from
web-server- prefix to dot prefix.
(web-server-socket-loop, web-server-handle-request, web-server-cleanup):
Update callers.
Christopher Allan Webber [Sun, 15 Jan 2017 15:26:27 +0000 (09:26 -0600)]
web: Rename handler slot to http-handler.
* 8sync/systems/web.scm (<web-server>, web-server-handle-request):
Rename handler slot to http-handler.
Christopher Allan Webber [Wed, 11 Jan 2017 17:09:01 +0000 (11:09 -0600)]
Add define-method-star.
* 8sync/systems/define-method-star.scm: New file.
Christopher Allan Webber [Wed, 11 Jan 2017 17:02:34 +0000 (11:02 -0600)]
Update copyrights.
* 8sync/actors.scm:
* 8sync/agenda.scm:
* 8sync/debug.scm:
* 8sync/repl.scm:
* 8sync/systems/irc.scm:
* 8sync/systems/web.scm:
* Makefile.am:
* demos/actors/botherbotherbother.scm:
* demos/actors/robotscanner.scm:
* demos/actors/simplest-possible.scm:
* demos/ircbot.scm: Update copyright lines.
Christopher Allan Webber [Wed, 11 Jan 2017 16:54:14 +0000 (10:54 -0600)]
web: New actorified version of the web server.
* 8sync/systems/web.scm: New file.
Christopher Allan Webber [Mon, 9 Jan 2017 17:17:38 +0000 (11:17 -0600)]
actors: Update comments on addresses.
* 8sync/actors.scm: Updated comments on addresses.
Christopher Allan Webber [Sun, 8 Jan 2017 21:27:32 +0000 (15:27 -0600)]
build: Releasing 8sync 0.4.1.
* configure.ac: Bumping verison number to 0.4.1.
Christopher Allan Webber [Sun, 8 Jan 2017 21:26:43 +0000 (15:26 -0600)]
build: Fix install targets to point to Guile 2.2 instead of 2.0.
* Makefile.am (modir, godir): Fix install targets to point to Guile 2.2
instead of 2.0.
Christopher Allan Webber [Sun, 8 Jan 2017 20:08:17 +0000 (14:08 -0600)]
packaging: Updating guix.scm to GPLv3+, setting source to checkout.
I talked to Jan Nieuwenhuizen, who agreed to license their
contributions to this file under GPLv3+, simplifying the licensing.
The rest of 8sync is still LGPLv3+... this just applies to the Guix
packaging. We also borrow some code from guile-sdl2 to set our source
to be from the package itself, making testing the package from
guix.scm easier.
* guix.scm: Switch license to GPLv3+.
Switch source to be from the local directory, borrowed from
guile-sdl2.
Christopher Allan Webber [Sun, 8 Jan 2017 00:53:57 +0000 (18:53 -0600)]
build: Releasing version 0.4.0.
* configure.ac: Update version number to 0.4.0.
Christopher Allan Webber [Sun, 8 Jan 2017 00:57:15 +0000 (18:57 -0600)]
build: Update and comment on hash in guix.scm.
* guix.scm: Update hash, but also acknowledge that updating the hash
here is futile since releasing will have a different hash! In the
future we'll have nicer code here that can use the code from the git
checkout.
Christopher Allan Webber [Sun, 8 Jan 2017 00:56:08 +0000 (18:56 -0600)]
build: Add guix.scm to tarball.
Makefile.am (EXTRA_DIST): Add guix.scm.
Christopher Allan Webber [Sun, 8 Jan 2017 00:52:34 +0000 (18:52 -0600)]
build: Rename package.scm to guix.scm and update.
* guix.scm: Renamed from package.scm and updated for v0.4.0.
Christopher Allan Webber [Sun, 8 Jan 2017 00:50:50 +0000 (18:50 -0600)]
build: Include bootstrap.sh in tarball.
* Makefile.am (EXTRA_DIST): Add bootstrap.sh.
Christopher Allan Webber [Sun, 8 Jan 2017 00:18:37 +0000 (18:18 -0600)]
NEWS: Updating news for v0.4.0.
* NEWS: New 8sync 0.4 section.
Christopher Allan Webber [Sat, 7 Jan 2017 23:13:27 +0000 (17:13 -0600)]
build: Add gendocs.
* doc/gendocs.sh:
* doc/gendocs_template: New files.
* .gitignore: Update to ignore files built by gendocs.sh.
Christopher Allan Webber [Sat, 7 Jan 2017 17:58:29 +0000 (11:58 -0600)]
doc: Move content from doc/8sync-new-manual.org to doc/8sync.texi.
* doc/8sync-new-manual.org: Deleted.
* doc/8sync.texi: Move content exported from doc/8sync-new-manual.org to
here.
Christopher Allan Webber [Fri, 6 Jan 2017 23:17:55 +0000 (17:17 -0600)]
doc: Delete trailing whitespace.
* doc/8sync-new-manual.org: Delete trailing whitespace.
Christopher Allan Webber [Fri, 6 Jan 2017 23:15:52 +0000 (17:15 -0600)]
doc: Last minute cleanups to the tutorial before we move to texinfo.
* doc/8sync-new-manual.org: Last minute cleanups to the tutorial before
we move to texinfo.
Christopher Allan Webber [Fri, 6 Jan 2017 22:23:50 +0000 (16:23 -0600)]
doc: Add a note about actor-alive? being likely to be deprecated.
* doc/8sync-new-manual.org: Add footnote about future deprecation of
actor-alive?.
Christopher Allan Webber [Fri, 6 Jan 2017 22:19:42 +0000 (16:19 -0600)]
doc: Have telcmd tutorial example send itself a message for line handling.
* doc/8sync-new-manual.org: Have telcmd tutorial example send itself a
message for line handling.
Christopher Allan Webber [Fri, 6 Jan 2017 21:58:16 +0000 (15:58 -0600)]
irc: Convert handle-line to a message handler.
* 8sync/systems/irc.scm (<irc-bot>): Add 'handle-line action handler,
which points to handle-line generic.
(dispatch-raw-line): Send message to our own actor to call handle-line.
(handle-line): Convert to be an action handler.
* demos/ircbot.scm:
* doc/8sync-new-manual.org: Update implementers of handle-line generic
method.
Christopher Allan Webber [Fri, 6 Jan 2017 18:21:44 +0000 (12:21 -0600)]
doc: Reordering some paragraphs in the tutorial.
* doc/8sync-new-manual.org: Reordering some paragraphs in the tutorial.
Christopher Allan Webber [Fri, 6 Jan 2017 18:19:00 +0000 (12:19 -0600)]
doc: Remove stray #+END_SRC.
* doc/8sync-new-manual.org: Remove stray #+END_SRC.
Christopher Allan Webber [Fri, 6 Jan 2017 17:29:27 +0000 (11:29 -0600)]
agenda: Remove deprecated comment.
* 8sync/agenda.scm (run-agenda): Remove comment, since we did the thing
it suggested doing in the future.
Christopher Allan Webber [Fri, 6 Jan 2017 16:11:54 +0000 (10:11 -0600)]
doc: Some tutorial tweaks.
* doc/8sync-new-manual.org: Small tutorial tweaks.
Christopher Allan Webber [Thu, 5 Jan 2017 03:38:23 +0000 (21:38 -0600)]
doc: Move the "live hacking intermission" to the bottom.
* doc/8sync-new-manual.org: Move the "live hacking intermission" to
the bottom of the tutorial.
Christopher Allan Webber [Thu, 5 Jan 2017 03:36:31 +0000 (21:36 -0600)]
doc: Tutorial additions.
* doc/8sync-new-manual.org: Add "Writing our own network-enabled
actor" section. Clean up other sections, including moving the intro
to the tutorial blathering about IRC systems to a footnote.
Christopher Allan Webber [Thu, 5 Jan 2017 02:02:13 +0000 (20:02 -0600)]
Use *init* and *cleanup* in existing actors.
* 8sync/repl.scm (<repl-manager>):
* 8sync/systems/irc.scm (<irc-bot>): Switch from an 'init action to the
implicit '*init* action.
* 8sync/systems/irc.scm (<irc-bot>, irc-bot-cleanup): Add *cleanup*
handler.
* demos/ircbot.scm:
* doc/8sync-new-manual.org: Drop some calls to 'init when
bootstrapping-messages since we now use '*init*.
Christopher Allan Webber [Wed, 4 Jan 2017 22:53:55 +0000 (16:53 -0600)]
demos: Switch botherbotherbother demo over to use define-actor.
* demos/actors/botherbotherbother.scm: Switch to use define-actor.
Christopher Allan Webber [Wed, 4 Jan 2017 20:12:15 +0000 (14:12 -0600)]
actors: Cleanup on signals.
* 8sync/actors.scm (run-hive): Handle signals, currently SIGINT and
SIGTERM, in a friendly way. Will still run cleanup on actors.
Christopher Allan Webber [Wed, 4 Jan 2017 17:41:30 +0000 (11:41 -0600)]
actors: Remove define-simple-actor, add define-actor.
define-simple-actor wasn't very useful, whereas define-actor is
moderately helpful.
* 8sync/actors.scm (define-simple-actor): Remove.
(define-actor): New macro.
* demos/actors/robotscanner.scm:
* demos/actors/simplest-possible.scm:
* tests/test-actors.scm: Convert to use define-simple-actor instead of
define-actor.
Christopher Allan Webber [Wed, 4 Jan 2017 17:41:22 +0000 (11:41 -0600)]
doc: Add a note about the calls to display.
* doc/8sync-new-manual.org: Add paragraph.
Christopher Allan Webber [Wed, 4 Jan 2017 17:31:57 +0000 (11:31 -0600)]
doc: Tweak and fix the "Writing our own actors" section.
* doc/8sync-new-manual.org: Fixed some errors and made things a bit
clearer.
Christopher Allan Webber [Wed, 4 Jan 2017 16:28:18 +0000 (10:28 -0600)]
actors: Rename msg-receive, msg-val to mbody-receive, mbody-val.
* 8sync/actors.scm (mbody-receive, mbody-val): Rename from msg-receive,
msg-val. Update all callers.
Christopher Allan Webber [Wed, 4 Jan 2017 01:57:50 +0000 (19:57 -0600)]
actors: Add auto-init feature to actors.
* 8sync/actors.scm (<actor>): Add '*init* action to actions slot.
(<hive>, hive-handle-init-all): Add '*init-all* action.
(hive-handle-cleanup-all): Adjust comment.
(%hive-create-actor): Add send-init? argument, and when supplied
call <-wait on the actor's '*init* method.
(bootstrap-actor, bootstrap-actor*): Rename from hive-create-actor,
hive-create-actor*. Switch init argument to init-args and pass in #f to
%hive-create-actor's send-init? argument.
(create-actor, create-actor*): Switch init argument to init-args
and pass in #t to %hive-create-actor's send-init? argument.
(run-hive): Add '*init-all* action call to the hive on the initial
queue.
* 8sync/debug.scm (bootstrap-actor-gimmie, bootstrap-actor-gimmie*):
Rename from hive-create-actor-gimmie, hive-create-actor-gimmie*.
* demos/actors/botherbotherbother.scm:
* demos/actors/robotscanner.scm:
* demos/actors/simplest-possible.scm:
* demos/ircbot.scm:
* doc/8sync-new-manual.org:
* tests/test-actors.scm: Change calls from hive-create-actor to
bootstrap-actor.
* tests/test-actors.scm: Add actor *init*'ing tests.
Christopher Allan Webber [Tue, 3 Jan 2017 17:48:28 +0000 (11:48 -0600)]
doc: Add addendum section on relationship between 8sync and Fibers.
* doc/8sync-new-manual.org: Add "8sync and Fibers" section.
Christopher Allan Webber [Tue, 3 Jan 2017 01:20:58 +0000 (19:20 -0600)]
actors: Implicit from-actor argument <-foo methods, and add rest of <-foo*.
* 8sync/actors.scm (<-, <-wait, <-reply, <-reply-wait): from-actor is
now implicitly supplied via %current-actor parameter.
(<-*, <-reply*): New procedures.
(<-wait*, <-reply-wait*): Now pull from-actor from #:actor.
* 8sync/actors.scm:
* 8sync/systems/irc.scm:
* demos/actors/botherbotherbother.scm:
* demos/actors/robotscanner.scm:
* demos/actors/simplest-possible.scm:
* demos/ircbot.scm:
* tests/test-actors.scm: Update all callers of <-foo procedures to drop
from-actor argument.
* doc/8sync-new-manual.org: Update documentation of <-foo procedures to
drop from-actor argument.
Christopher Allan Webber [Mon, 2 Jan 2017 22:33:10 +0000 (16:33 -0600)]
agenda: Rename start-agenda to run-agenda.
* 8sync/agenda.scm (run-agenda): Renamed from start-agenda.
* 8sync/actors.scm:
* tests/test-agenda.scm: Update all callers.
Christopher Allan Webber [Mon, 2 Jan 2017 21:38:23 +0000 (15:38 -0600)]
actors: Rename *clean-up* back to *cleanup.
By popular intarwebs opinion.
* 8sync/actors.scm (<actor>, <hive>, hive-handle-cleanup-all)
(self-destruct, run-hive): Rename all references of clean-up to cleanup.
(hive-handle-cleanup-all, run-hive-cleanup): Rename name from clean-up
version.
* tests/test-actors.scm: Likewise.
Christopher Allan Webber [Mon, 2 Jan 2017 21:15:59 +0000 (15:15 -0600)]
actors: Rename actor-am-i-alive? to actor-alive?.
* 8sync/actors.scm (actor-alive?): Rename from actor-am-i-alive?.
* 8sync/actors.scm:
* 8sync/repl.scm:
* doc/8sync-new-manual.org: Update all references to actor-alive?.
Christopher Allan Webber [Mon, 2 Jan 2017 21:15:29 +0000 (15:15 -0600)]
actors: Automatically add cookie by default in hive-create-actor.
Also switch separator in cookie from "-" to ":".
* 8sync/actors.scm (hive-gen-actor-id): Switch separator from "-" to ":".
(hive-create-actor): Automatically add a cookie based on the class name.
(hive-create-actor*): Tweak docstring.
Christopher Allan Webber [Mon, 2 Jan 2017 18:23:52 +0000 (12:23 -0600)]
tests: Fix broken test in test-actors.
* tests/test-actors.scm: Fix broken test, forgot to update expected output.
Christopher Allan Webber [Mon, 2 Jan 2017 18:21:23 +0000 (12:21 -0600)]
tests: Oops, forgot to add <exploder> to test-actors.
* tests/test-actors.scm: Add <exploder>.
Christopher Allan Webber [Mon, 2 Jan 2017 18:17:15 +0000 (12:17 -0600)]
actors: Update self-destruct to run *clean-up* message handler.
* 8sync/actors.scm (self-destruct): Wait on *clean-up* action before
self-destructing by default.
(run-hive): Add parameter to specify whether or not to clean-up after
the hive finishes its tasks.
* tests/test-actors.scm: Add tests for disabling #:clean-up on run-tasks
and ensuring that *clean-up* runs on self-destruct.
Christopher Allan Webber [Mon, 2 Jan 2017 17:54:03 +0000 (11:54 -0600)]
actors: Rename *cleanup* action to *clean-up*.
* 8sync/actors.scm (<actor>, <hive>, hive-handle-clean-up-all, run-hive):
Rename *cleanup* to *clean-up* and *cleanup-all* to *clean-up-all*.
* tests/test-actors.scm: Likewise.
Christopher Allan Webber [Mon, 2 Jan 2017 17:40:42 +0000 (11:40 -0600)]
actors: Add cleanup facility to run-hive.
* 8sync/actors.scm (build-actions): Moved location to be before <actor>
for compiler reasons.
(<actor>): Add *cleanup* default action to all actors, which does
nothing by default.
(<hive>, hive-handle-cleanup-all): New cleanup method, which gives
all actors still in the registry a chance to clean up.
(make-hive): Have the hive register itself to itself.
(run-hive): Now run in a dynamic-wind, and call run-hive-cleanup when
we're done.
(run-hive-cleanup): New variable.
* tests/test-actors.scm: New test to make sure cleanup is run.
Christopher Allan Webber [Mon, 2 Jan 2017 17:34:13 +0000 (11:34 -0600)]
tests: Add "speaker" utility.
* tests/utils.scm (speak-it, %speaker, speak, get-spoken, with-fresh-speaker):
New variables.
* tests/test-agenda.scm (speak-it): Remove in favor of new speaker from
utils.scm. Update to use new speaker.
Christopher Allan Webber [Mon, 2 Jan 2017 00:46:08 +0000 (18:46 -0600)]
doc: Rename calls to ez-run-hive to run-hive and adjust titles.
* doc/8sync-new-manual.org: Rename calls to ez-run-hive to run-hive and
adjust titles.
Christopher Allan Webber [Mon, 2 Jan 2017 00:45:50 +0000 (18:45 -0600)]
actors: Rename ez-run-hive to run-hive.
* 8sync/actors.scm (run-hive): Renamed from ez-run-hive.
All callers changed.
Christopher Allan Webber [Sun, 1 Jan 2017 14:57:01 +0000 (08:57 -0600)]
docs: Added "Writing our own actors" section
* doc/8sync-new-manual.org: New "Writing our own actors and sending
messages between them" section.
Christopher Allan Webber [Sat, 31 Dec 2016 15:48:36 +0000 (09:48 -0600)]
doc: Add pk debugging section.
* doc/8sync-new-manual.org: Add pk debugging section.
Simplify some handle-line examples.
Christopher Allan Webber [Fri, 30 Dec 2016 15:22:41 +0000 (09:22 -0600)]
doc: Finish "About live hacking" section.
* doc/8sync-new-manual.org: "An intermission: about live hacking" section
finished, at least for now.
Christopher Allan Webber [Wed, 28 Dec 2016 17:49:05 +0000 (11:49 -0600)]
agenda: When re-invoking a continuation at the agenda, don't wrap in a catch.
* 8sync/agenda.scm (<kontinue>): Add new record type which just wraps a
delimited continuation.
(8sync, 8sleep, 8yield): Wrap continuations in kontinue.
(agenda-run-once!): If "kontinue?", just resume the continuation without
catching errors (it already has an error handler!).
Christopher Allan Webber [Wed, 28 Dec 2016 16:33:19 +0000 (10:33 -0600)]
agenda: Fix prompt buildup in agenda.
Every time a delimited continuation was resumed, we were re-parameterizing.
* 8sync/agenda.scm (current-agenda-prompt): Remove.
(8sync-abort-to-prompt): Use (%current-agenda-prompt) parameter.
(%current-agenda-prompt): New prompt, deprecating %current-agenda. This
is a slight optimization; we were only using the agenda for the prompt,
so we can remove the indirection of looking up the agenda prompt tag
every time.
(%current-agenda): Removed, see above.
(start-agenda): Move parameterization of %current-agenda-prompt,
current-read-waiter, and current-write-waiter here.
(agenda-run-once!): Remove parameterization.
Also remove comment which is irrelevant now that we're no longer using
an immutable-record-type on the agenda.
Christopher Allan Webber [Wed, 28 Dec 2016 16:29:58 +0000 (10:29 -0600)]
agenda: Switch "yield" to "8yield" and export.
This avoids a name collision with an existing procedure. Plus yield was
never exported, apparently.
* 8sync/agenda.scm (8yield): Renamed from yield.
Christopher Allan Webber [Tue, 27 Dec 2016 20:17:42 +0000 (14:17 -0600)]
agenda: Major cleanup.
* 8sync/agenda.scm (<agenda>, make-agenda, agenda-time): Move from being
an immutable-record-type to just a regular one. Add set-agenda-queue!
and remove time slot.
(time-from-float-or-fraction, time-segment-right-format, <time-delta>)
(make-time-delta, tdelta, time-delta+, 8usleep): Removed.
(schedule-add!, schedule-segments-split): Remove let shadowing of time.
There's no need to always convert the time format since it should now be
correct by the time it gets here.
(delayed-time): New variable.
(run-delay, 8sleep): Use delayed-time.
(update-agenda-from-select!): Use gettimeofday instead of agenda-time.
(start-agenda): Remove get-time and handle-ports keyword arguments.
Simplify loop considerably.
(agenda-run-once!): Renamed from agenda-run-once. Simplify the enqueue
part of the code since we've constrained what an acceptable time value
looks like. Use set-agenda-queue!.
* tests/test-agenda: Update for changes to agenda.scm.