diff options
Diffstat (limited to 'crates/atuin-daemon/src/server.rs')
| -rw-r--r-- | crates/atuin-daemon/src/server.rs | 62 |
1 files changed, 48 insertions, 14 deletions
diff --git a/crates/atuin-daemon/src/server.rs b/crates/atuin-daemon/src/server.rs index 72305737..77824f60 100644 --- a/crates/atuin-daemon/src/server.rs +++ b/crates/atuin-daemon/src/server.rs @@ -13,8 +13,6 @@ use atuin_client::database::{Database, Sqlite as HistoryDatabase}; use atuin_client::history::{History, HistoryId}; use dashmap::DashMap; use eyre::Result; -use tokio::net::UnixListener; -use tokio_stream::wrappers::UnixListenerStream; use tonic::{transport::Server, Request, Response, Status}; use crate::history::history_server::{History as HistorySvc, HistoryServer}; @@ -134,6 +132,7 @@ impl HistorySvc for HistoryService { } } +#[cfg(unix)] async fn shutdown_signal(socket: PathBuf) { let mut term = tokio::signal::unix::signal(tokio::signal::unix::SignalKind::terminate()) .expect("failed to register sigterm handler"); @@ -150,6 +149,52 @@ async fn shutdown_signal(socket: PathBuf) { eprintln!("Shutting down..."); } +#[cfg(windows)] +async fn shutdown_signal() { + tokio::signal::windows::ctrl_c() + .expect("failed to register signal handler") + .recv() + .await; + eprintln!("Shutting down..."); +} + +#[cfg(unix)] +async fn start_server(settings: Settings, history: HistoryService) -> Result<()> { + use tokio::net::UnixListener; + use tokio_stream::wrappers::UnixListenerStream; + + let socket = settings.daemon.socket_path.clone(); + + let uds = UnixListener::bind(socket.clone())?; + let uds_stream = UnixListenerStream::new(uds); + + tracing::info!("listening on unix socket {:?}", socket); + Server::builder() + .add_service(HistoryServer::new(history)) + .serve_with_incoming_shutdown(uds_stream, shutdown_signal(socket.into())) + .await?; + Ok(()) +} + +#[cfg(not(unix))] +async fn start_server(settings: Settings, history: HistoryService) -> Result<()> { + use tokio::net::TcpListener; + use tokio_stream::wrappers::TcpListenerStream; + + let port = settings.daemon.tcp_port; + let url = format!("127.0.0.1:{}", port); + let tcp = TcpListener::bind(url).await?; + let tcp_stream = TcpListenerStream::new(tcp); + + tracing::info!("listening on tcp port {:?}", port); + + Server::builder() + .add_service(HistoryServer::new(history)) + .serve_with_incoming_shutdown(tcp_stream, shutdown_signal()) + .await?; + Ok(()) +} + // break the above down when we end up with multiple services /// Listen on a unix socket @@ -168,12 +213,6 @@ pub async fn listen( let history = HistoryService::new(history_store.clone(), history_db.clone()); - let socket = settings.daemon.socket_path.clone(); - let uds = UnixListener::bind(socket.clone())?; - let uds_stream = UnixListenerStream::new(uds); - - tracing::info!("listening on unix socket {:?}", socket); - // start services tokio::spawn(sync::worker( settings.clone(), @@ -182,10 +221,5 @@ pub async fn listen( history_db, )); - Server::builder() - .add_service(HistoryServer::new(history)) - .serve_with_incoming_shutdown(uds_stream, shutdown_signal(socket.into())) - .await?; - - Ok(()) + start_server(settings, history).await } |
