Added channel and worker.

This commit is contained in:
didier amyot committed 2023-02-11 08:54:54 -05:00
1 parent af687df9de
commit 5ff946af8f
5 files changed
+85 -38

No files matched your search

+35 -32
View File
@@ -1,29 +1,28 @@
#![feature(future_join)]
use std::{collections::HashMap, env, fs, io, path::PathBuf};
use std::io::{Error, ErrorKind};
use std::path::Path;
use actix_files;
use actix_utils::future::{ready, Ready};
use actix_web::{
App,
dev::ServiceResponse,
error,
FromRequest,
http::{header::ContentType, StatusCode}, HttpRequest, HttpResponse, HttpServer, middleware::{ErrorHandlerResponse, ErrorHandlers, Logger}, Responder, Result, web,
};
use actix_web_lab::respond::Html;
use async_channel;
use futures::{FutureExt, pin_mut, select};
use minijinja;
use minijinja_autoreload::AutoReloader;
use tokio::time::{Duration, sleep};
mod views;
mod config;
use actix_utils::future::{ready, Ready};
use minijinja;
use minijinja_autoreload::AutoReloader;
use std::io::{Error, ErrorKind};
use std::path::Path;
use std::{collections::HashMap, env, fs, io, path::PathBuf};
use tokio::time::{sleep, Duration};
use futures::{pin_mut, select, FutureExt};
use actix_files;
use actix_web::{
dev::ServiceResponse,
error,
http::{header::ContentType, StatusCode},
middleware::{ErrorHandlerResponse, ErrorHandlers, Logger},
web, App, FromRequest, HttpRequest, HttpResponse, HttpServer, Responder, Result,
};
use actix_web_lab::respond::Html;
struct MiniJinjaRenderer {
tmpl_env: web::Data<minijinja_autoreload::AutoReloader>,
}
@@ -62,12 +61,16 @@ impl FromRequest for MiniJinjaRenderer {
}
}
async fn print_shit() -> std::io::Result<()>{
let mut i = 0;
async fn worker_loop(r: async_channel::Receiver<i32>) -> io::Result<()> {
loop {
sleep(Duration::from_millis(10_000)).await;
println!("Loop on a different thread {:?}", i);
i +=1;
let x = r.recv().await;
match x {
Ok(v) => println!("Processed value: {:?}", v),
Err(e) => {
println!("Error: {:?}", e);
return Ok(())
}
}
}
}
@@ -88,16 +91,16 @@ pub async fn web_ui_main(port: u16, enable_template_autoreload: bool) -> std::io
Ok(env)
});
let (s, r) = async_channel::unbounded::<i32>();
let tmpl_reloader = web::Data::new(tmpl_reloader);
let server = HttpServer::new(move || {
App::new()
.app_data(tmpl_reloader.clone())
.service(
actix_files::Files::new("/static", "./resources/static/")
.show_files_listing()
.use_last_modified(true),
)
.app_data(web::Data::new(s.clone()))
.service(actix_files::Files::new("/static", "./resources/static/")
.use_last_modified(true))
.service(views::index)
.service(views::actions)
.service(views::overview)
@@ -111,7 +114,7 @@ pub async fn web_ui_main(port: u16, enable_template_autoreload: bool) -> std::io
.bind(("0.0.0.0", port))?;
let t1 = server.run().fuse();
let t2 = print_shit().fuse();
let t2 = worker_loop(r).fuse();
pin_mut!(t1, t2);
select!{