mirror of
https://github.com/saveweb/stwp-rs
synced 2024-09-19 05:45:29 -07:00
test
This commit is contained in:
parent
53de2a0b1c
commit
5c47a6eefc
@ -2,10 +2,10 @@ use std::sync::Arc;
|
||||
|
||||
use tokio::{sync::RwLock, time::Duration};
|
||||
|
||||
use crate::{Tracker, TRACKER_NODES};
|
||||
use crate::{project::Project, Tracker, TRACKER_NODES};
|
||||
|
||||
impl Tracker {
|
||||
pub fn start_select_tracker_background(api_base: Arc<RwLock<&'static str>>) {
|
||||
pub fn select_tracker_background(api_base: Arc<RwLock<&'static str>>) {
|
||||
tokio::spawn(async move {
|
||||
loop {
|
||||
tokio::time::sleep(Duration::from_secs(60)).await;
|
||||
|
17
src/lib.rs
17
src/lib.rs
@ -4,10 +4,10 @@ use tokio::sync::RwLock;
|
||||
use tokio::time::Duration;
|
||||
|
||||
pub mod archivist;
|
||||
pub mod background;
|
||||
pub mod item;
|
||||
pub mod project;
|
||||
pub mod task;
|
||||
pub mod background;
|
||||
|
||||
const TRACKER_NODES: [&str; 7] = [
|
||||
// "http://localhost:8080", // 测试环境
|
||||
@ -28,7 +28,7 @@ pub struct Tracker {
|
||||
http_client: reqwest::Client,
|
||||
client_version: String,
|
||||
archivist: String,
|
||||
project: Option<Project>,
|
||||
project: Arc<RwLock<Option<Project>>>,
|
||||
}
|
||||
|
||||
impl Tracker {
|
||||
@ -38,9 +38,9 @@ impl Tracker {
|
||||
archivist: String,
|
||||
) -> Result<Self, Box<dyn std::error::Error>> {
|
||||
let api_base = Arc::new(RwLock::new(TRACKER_NODES[1]));
|
||||
Self::start_select_tracker_background(Arc::clone(&api_base));
|
||||
Ok(Tracker {
|
||||
api_base,
|
||||
let project = Arc::new(RwLock::new(None));
|
||||
let t = Tracker {
|
||||
api_base: Arc::clone(&api_base),
|
||||
api_version: "v1",
|
||||
project_id: project_id,
|
||||
http_client: reqwest::Client::builder()
|
||||
@ -48,8 +48,11 @@ impl Tracker {
|
||||
.build()?,
|
||||
client_version,
|
||||
archivist,
|
||||
project: None,
|
||||
})
|
||||
project,
|
||||
};
|
||||
Self::select_tracker_background(api_base);
|
||||
t.update_project_background();
|
||||
Ok(t)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -42,7 +42,7 @@ pub struct Project {
|
||||
}
|
||||
|
||||
impl Tracker {
|
||||
pub async fn fetch_project(&self) -> Result<Project, Box<dyn std::error::Error>> {
|
||||
async fn fetch_project(&self) -> Result<Project, Box<dyn std::error::Error>> {
|
||||
println!("fetch_project... {}", self.project_id);
|
||||
let api_base = *self.api_base.read().await;
|
||||
|
||||
@ -51,15 +51,22 @@ impl Tracker {
|
||||
api_base, self.api_version, self.project_id
|
||||
);
|
||||
let res = self.http_client.post(&url).send().await?;
|
||||
// parse response as json
|
||||
let project: Project = serde_json::from_str(&res.text().await?)?;
|
||||
Ok(project)
|
||||
}
|
||||
|
||||
pub async fn get_project(&mut self) -> &Project {
|
||||
if self.project.is_none() {
|
||||
self.project = Some(self.fetch_project().await.unwrap());
|
||||
}
|
||||
self.project.as_ref().unwrap()
|
||||
} // if let 会转移所有权
|
||||
pub async fn update_project(&self) {
|
||||
let project = self.project.clone();
|
||||
let new_project = self.fetch_project().await.unwrap();
|
||||
let mut write_guard = project.write().await;
|
||||
*write_guard = Some(new_project);
|
||||
}
|
||||
|
||||
// pub async fn get_project(&mut self) -> &Project {
|
||||
// if self.project.read().await.is_none() {
|
||||
// let project = self.fetch_project().await.unwrap();
|
||||
// *self.project.write().await = Some(project);
|
||||
// }
|
||||
// self.project.read().await.as_ref().unwrap()
|
||||
//} if let 会转移所有权
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user