aboutsummaryrefslogtreecommitdiffstats
path: root/crates/atuin-daemon/src/server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/atuin-daemon/src/server.rs')
-rw-r--r--crates/atuin-daemon/src/server.rs62
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
}