diff options
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"); + } + } + } + } + } +} |