1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
#![recursion_limit = "512"] extern crate tokio; #[macro_use] mod result; mod canvas; mod web; mod websocket; pub use result::*; use async_std::sync; pub use canvas::*; use tokio::sync::mpsc; use websocket::WSMessage; pub fn start_server(web_addr: &str, websocket_addr: &str) -> Result<CanvasGenerator> { let (sender, receiver) = sync::channel::<mpsc::Receiver<WSMessage>>(1024); tokio::spawn(websocket::start_server( websocket_addr.to_string(), receiver, )); tokio::task::spawn_local(web::start_server( web_addr.to_string(), websocket_addr.to_string(), )); Ok(CanvasGenerator { sender }) } #[cfg(test)] mod tests { use super::*; use env_logger::Builder; use log::LevelFilter; use log::*; use std::time::Duration; use tokio::time::delay_for; async fn test_thread(server: CanvasGenerator) { info!("making canvas"); let mut canvas = server .make_2d_canvas(Default::default(), 100, 100) .await .unwrap(); info!("got canvas"); canvas.set_fill_style("#cccccc").await.unwrap(); canvas.fill_rect(30.0, 30.0, 30.0, 30.0).await.unwrap(); info!( "data url: {}", canvas.to_data_url("image/png", None).await.unwrap() ); drop(canvas); info!("drop canvas"); } #[actix_rt::test] async fn test() -> Result<()> { Builder::from_default_env() .filter_level(LevelFilter::Debug) .init(); let started_server = start_server("127.0.0.1:7070", "127.0.0.1:7071")?; loop { tokio::spawn(test_thread(started_server.clone())); delay_for(Duration::from_millis(5)).await; } } }