summaryrefslogtreecommitdiff
path: root/lib/MaildirIndexer/Server.rakumod
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2019-12-29 13:24:00 +0000
committerdakkar <dakkar@thenautilus.net>2019-12-29 13:45:21 +0000
commit5b10920b6e38614ceea0cd97031ab48f4f1f9a39 (patch)
tree031a9a787823b6a2913824235a77f86f76a94d88 /lib/MaildirIndexer/Server.rakumod
parentit's called `raku` now (diff)
downloadMaildirIndexer-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.rakumod33
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");
+ }
+ }
+ }
+ }
+ }
+}