use std::{rc::Rc, ops::Deref};
use crate::getstate::GetState;
#[derive(Debug, Clone, Copy)]
pub struct Http {
pub timeout: u64,
pub state_ptr: GetState,
}
impl Http {
pub fn new(timeout: u64, state_ptr: GetState) -> Self {
Http {
timeout,
state_ptr,
}
}
pub fn get_timeout(&self) -> u64 {
self.timeout
}
pub async fn work(&mut self, lines_vec: Rc<Vec<String>>) {
let mut tasks = Vec::new();
let time = self.get_timeout();
let ptr = lines_vec.deref().clone();
for line in ptr {
let task = tokio::spawn(async move {
let client = reqwest::Client::new();
let url = line.to_string();
let res = client.get(line)
.timeout(std::time::Duration::from_secs(time))
.send().await;
match res {
Ok(_) => {
println!("{}", url);
return true;
}
Err(_) => {
return false;
}
}
});
tasks.push(task);
}
for task in tasks {
let rval = task.await.unwrap();
if rval {
self.state_ptr.add_success();
} else {
self.state_ptr.add_failure();
}
}
}
}