diff options
author | dakkar <dakkar@thenautilus.net> | 2019-12-29 13:24:00 +0000 |
---|---|---|
committer | dakkar <dakkar@thenautilus.net> | 2019-12-29 13:45:21 +0000 |
commit | 5b10920b6e38614ceea0cd97031ab48f4f1f9a39 (patch) | |
tree | 031a9a787823b6a2913824235a77f86f76a94d88 /lib/MaildirIndexer/Server.rakumod | |
parent | it's called `raku` now (diff) | |
download | MaildirIndexer-5b10920b6e38614ceea0cd97031ab48f4f1f9a39.tar.gz MaildirIndexer-5b10920b6e38614ceea0cd97031ab48f4f1f9a39.tar.bz2 MaildirIndexer-5b10920b6e38614ceea0cd97031ab48f4f1f9a39.zip |
new module extension
Diffstat (limited to 'lib/MaildirIndexer/Server.rakumod')
-rw-r--r-- | lib/MaildirIndexer/Server.rakumod | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/lib/MaildirIndexer/Server.rakumod b/lib/MaildirIndexer/Server.rakumod new file mode 100644 index 0000000..07dfb4a --- /dev/null +++ b/lib/MaildirIndexer/Server.rakumod @@ -0,0 +1,33 @@ +use v6.d; +unit class MaildirIndexer::Server; +use MaildirIndexer::LogTimelineSchema; +use MaildirIndexer::Parser; +use MaildirIndexer::Store; + +has $.port = 9000; +has MaildirIndexer::Store $.store is required; + +method serve() { + my $listener = IO::Socket::Async.listen( + '127.0.0.1', + $.port, + :enc<utf8-c8>, + ); + + react { + whenever signal(SIGINT) { exit } + whenever signal(SIGHUP) { + $.store.dump(); + } + whenever $listener -> $conn { + MaildirIndexer::LogTimelineSchema::Server::Serve.log: { + LEAVE { $conn.close } + with parse-email($conn) -> $email { + with $.store.mailbox-for-email($email) -> $mailbox { + await $conn.print("$mailbox\x0d\x0a"); + } + } + } + } + } +} |