Added channel and worker.
This commit is contained in:
1 parent
af687df9de
commit
5ff946af8f
5 files changed
+85
-38
No files matched your search
+35
-32
@@ -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!{
|
||||
|
||||
@@ -84,10 +84,12 @@ struct CreateEventPayload {
|
||||
pub async fn push_event(
|
||||
req: HttpRequest,
|
||||
tmpl_env: MiniJinjaRenderer,
|
||||
event_channel: web::Data<async_channel::Sender<i32>>,
|
||||
web::Json(form): web::Json<CreateEventPayload>,
|
||||
) -> actix_web::Result<impl Responder> {
|
||||
let shit = req.match_info().get("event_type").unwrap();
|
||||
println!("payload: {:?}", form);
|
||||
let _ = event_channel.send(56).await;
|
||||
let ctx = context! {
|
||||
event_type => shit,
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user