]> git.lizzy.rs Git - connect-rs.git/blob - src/tcp/server.rs
make async-oriented, remove block_on
[connect-rs.git] / src / tcp / server.rs
1 use crate::Connection;
2 use async_std::net::{SocketAddr, TcpListener, ToSocketAddrs};
3 use log::*;
4
5 #[allow(dead_code)]
6 pub struct TcpServer {
7     local_addrs: SocketAddr,
8     listener: TcpListener,
9 }
10
11 impl TcpServer {
12     pub async fn new<A: ToSocketAddrs + std::fmt::Display>(ip_addrs: A) -> anyhow::Result<Self> {
13         let listener = TcpListener::bind(&ip_addrs).await?;
14         info!("Started TCP server at {}", &ip_addrs);
15
16         Ok(Self {
17             local_addrs: listener.local_addr()?,
18             listener,
19         })
20     }
21
22     pub async fn accept(&self) -> anyhow::Result<Connection> {
23         let (stream, ip_addr) = self.listener.accept().await?;
24         debug!("Received connection attempt from {}", ip_addr);
25
26         Ok(Connection::from(stream))
27     }
28 }