| 1959 | |
| 1960 | #[cfg(unix)] |
| 1961 | async fn serve_socket_client(stream: tokio::net::UnixStream, engine: DaemonEngine) -> Result<()> { |
| 1962 | let mut transport = UnixStreamTransport::new(stream); |
| 1963 | let Some(line) = transport.read_line().await? else { |
| 1964 | return Ok(()); |
| 1965 | }; |
| 1966 | let handshake = DaemonHandshake::from_line(&line)?; |
| 1967 | engine.log_client_version_skew(&handshake).await; |
| 1968 | if handshake.project_path.is_some() { |
| 1969 | let server = match Box::pin(engine.project_server(&handshake)).await { |
| 1970 | Ok(server) => server, |
| 1971 | Err(e) => { |
| 1972 | write_project_open_error(&mut transport, &e).await?; |
| 1973 | return Err(e); |
| 1974 | } |
| 1975 | }; |
| 1976 | Box::pin(server.run_connection_with_timings(&mut transport, handshake.timings)).await?; |
| 1977 | } else { |
| 1978 | serve_projectless_client(&mut transport, &handshake.client_identity).await?; |
| 1979 | } |
| 1980 | Ok(()) |
| 1981 | } |
| 1982 | |
| 1983 | async fn open_project_for_handshake( |
| 1984 | project_path: &Path, |