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