summaryrefslogtreecommitdiff
path: root/lib/MaildirIndexer/Server.rakumod
diff options
context:
space:
mode:
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");
+ }
+ }
+ }
+ }
+ }
+}