41 lines
1.3 KiB
Rust
41 lines
1.3 KiB
Rust
use crate::config::Context;
|
|
|
|
use std::io;
|
|
use std::sync::Arc;
|
|
use tokio::io::AsyncWriteExt;
|
|
use tokio::net::TcpSocket;
|
|
use tokio::sync::mpsc::Sender;
|
|
use tokio::sync::Mutex;
|
|
|
|
pub async fn apiserver(ctxarc: &Arc<Mutex<Context>>, apitx: Sender<String>) -> io::Result<()> {
|
|
let ctxclone = Arc::clone(ctxarc);
|
|
let ctx = ctxclone.lock().await;
|
|
let addr = ctx.cfg.api.parse().unwrap();
|
|
drop(ctx);
|
|
|
|
let socket = TcpSocket::new_v4().unwrap();
|
|
socket.bind(addr).unwrap();
|
|
let listener = socket.listen(1024).unwrap();
|
|
|
|
tokio::spawn(async move {
|
|
loop {
|
|
match listener.accept().await {
|
|
Ok((mut socket, addr)) => {
|
|
let ctx = ctxclone.lock().await;
|
|
let (reader, mut writer) = socket.split();
|
|
apitx.send(String::from("")).await.unwrap();
|
|
let msg = format!("{:?}", ctx.blocklist.len());
|
|
writer
|
|
.write_all(format!("{msg}\r\n").as_bytes())
|
|
.await
|
|
.unwrap();
|
|
writer.shutdown().await.unwrap();
|
|
socket.shutdown().await.unwrap();
|
|
}
|
|
Err(e) => println!("couldn't get client: {:?}", e),
|
|
}
|
|
}
|
|
});
|
|
Ok(())
|
|
}
|