Handle CTRL+C for IMAP

This commit is contained in:
Quentin 2022-06-17 10:42:02 +02:00
parent 5599901b3b
commit 212573b4b1
Signed by: quentin
GPG key ID: E9602264D639FF68
2 changed files with 21 additions and 16 deletions

View file

@ -11,11 +11,11 @@ use rusoto_signature::Region;
use tokio::sync::watch;
use tower::Service;
use crate::service;
use crate::lmtp::*;
use crate::config::*;
use crate::lmtp::*;
use crate::login::{ldap_provider::*, static_provider::*, *};
use crate::mailbox::Mailbox;
use crate::service;
pub struct Server {
lmtp_server: Option<Arc<LmtpServer>>,
@ -38,7 +38,6 @@ impl Server {
})
}
pub async fn run(self) -> Result<()> {
//tracing::info!("Starting server on {:#}", self.imap.incoming.local_addr);
tracing::info!("Starting Aerogramme...");
@ -49,21 +48,24 @@ impl Server {
let _ = provoke_exit.send(true);
};
try_join!(async {
match self.lmtp_server.as_ref() {
None => Ok(()),
Some(s) => s.run(exit_signal.clone()).await,
try_join!(
async {
match self.lmtp_server.as_ref() {
None => Ok(()),
Some(s) => s.run(exit_signal.clone()).await,
}
},
//@FIXME handle ctrl + c
async {
let mut must_exit = exit_signal.clone();
tokio::select! {
s = self.imap_server => s?,
_ = must_exit.changed() => tracing::info!("IMAP server received CTRL+C, exiting."),
}
Ok(())
}
},
//@FIXME handle ctrl + c
async {
self.imap_server.await?;
Ok(())
}
)?;
Ok(())
}
}

View file

@ -84,7 +84,10 @@ pub struct Instance {
pub user: Option<User>,
}
impl Instance {
fn new(login_provider: Arc<dyn LoginProvider + Send + Sync>, rx: mpsc::Receiver<Message>) -> Self {
fn new(
login_provider: Arc<dyn LoginProvider + Send + Sync>,
rx: mpsc::Receiver<Message>,
) -> Self {
Self {
login_provider,
rx,