diff options
Diffstat (limited to 'lib/MaildirIndexer/Server.pm6')
-rw-r--r-- | lib/MaildirIndexer/Server.pm6 | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/MaildirIndexer/Server.pm6 b/lib/MaildirIndexer/Server.pm6 new file mode 100644 index 0000000..53f4ba9 --- /dev/null +++ b/lib/MaildirIndexer/Server.pm6 @@ -0,0 +1,30 @@ +use v6.d; +unit class MaildirIndexer::Server; +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', + 9000, + :enc<utf8-c8>, + ); + + react { + whenever signal(SIGINT) { exit } + whenever signal(SIGHUP) { + $.store.dump(); + } + whenever $listener -> $conn { + LEAVE { $conn.close } + with parse-email($conn) -> $email { + with $.store.mailbox-for-email($email) -> $mailbox { + await $conn.print("$mailbox\x0d\x0a"); + } + } + } + } +} |