created basic ui that counts
This commit is contained in:
parent
d320f345c8
commit
8e78bf542c
|
|
@ -7,3 +7,13 @@ edition = "2018"
|
|||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
cursive = "0.17"
|
||||
uuid = {version = "0.8", features = ["serde", "v4"]}
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0"
|
||||
crossbeam = "0.8.0"
|
||||
crossbeam-channel = "0.5.0"
|
||||
tokio = { version = "1.9.0", features = ["full"] }
|
||||
futures = "0.3.16"
|
||||
|
||||
foundation = {path = '../foundation'}
|
||||
|
|
@ -1,3 +1,19 @@
|
|||
mod worker;
|
||||
mod managers;
|
||||
|
||||
use worker::Worker;
|
||||
use cursive::{Cursive, CursiveExt};
|
||||
use cursive::traits::Nameable;
|
||||
use cursive::views::{Dialog, TextView};
|
||||
|
||||
fn main() {
|
||||
println!("Hello, world!");
|
||||
let mut app = Cursive::default();
|
||||
let workerStream = Worker::new(app.cb_sink().clone()).start();
|
||||
|
||||
app.set_user_data(workerStream);
|
||||
app.add_layer(Dialog::new()
|
||||
.content(TextView::new("Hello world").with_name("TextView"))
|
||||
.button("close", |s| s.quit()));
|
||||
app.set_fps(30);
|
||||
app.run();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,72 @@
|
|||
use std::sync::Arc;
|
||||
use std::sync::atomic::AtomicUsize;
|
||||
use std::thread::spawn;
|
||||
use std::time::Duration;
|
||||
|
||||
use crossbeam_channel::Sender as CrossSender;
|
||||
use cursive::backends::curses::n::ncurses::LcCategory::numeric;
|
||||
use tokio::runtime::Runtime;
|
||||
use tokio::sync::mpsc::{channel, Sender as TokioSender};
|
||||
use tokio::sync::Mutex;
|
||||
use tokio::time::sleep;
|
||||
|
||||
use foundation::ClientDetails;
|
||||
use crate::{Cursive, TextView};
|
||||
use crate::managers::NetworkManager;
|
||||
|
||||
pub enum WorkerMessage {
|
||||
Disconnect,
|
||||
Connect {username: String},
|
||||
}
|
||||
|
||||
pub type CursiveSender = CrossSender<Box<dyn FnOnce(&mut Cursive) + Send>>;
|
||||
|
||||
pub struct Worker {
|
||||
cursive_sender: CursiveSender,
|
||||
|
||||
network_manager: NetworkManager,
|
||||
|
||||
number: Arc<Mutex<usize>>,
|
||||
|
||||
user_details: Mutex<Option<ClientDetails>>,
|
||||
}
|
||||
|
||||
impl Worker {
|
||||
pub fn new(sender: CursiveSender) -> Worker {
|
||||
Worker {
|
||||
cursive_sender: sender,
|
||||
number: Arc::new(Mutex::new(0)),
|
||||
user_details: Mutex::new(None)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn start(self) -> TokioSender<WorkerMessage> {
|
||||
let (tx,rx) = channel::<WorkerMessage>(16);
|
||||
spawn(move || {
|
||||
|
||||
let sender = self.cursive_sender.clone();
|
||||
let rt = Runtime::new().unwrap();
|
||||
let tmp_num = self.number.clone();
|
||||
rt.block_on(async move {
|
||||
let a = &tmp_num;
|
||||
loop {
|
||||
let num = Arc::clone(&a);
|
||||
sleep(Duration::new(1,0)).await;
|
||||
let _ = sender.send(Box::new( move |s| {
|
||||
let num = &num.clone();
|
||||
let mut num_lock = num.blocking_lock();
|
||||
*num_lock += 1;
|
||||
let a = *num_lock;
|
||||
s.find_name::<TextView>("TextView").unwrap().set_content(a.to_string());
|
||||
}));
|
||||
}
|
||||
})
|
||||
});
|
||||
tx
|
||||
}
|
||||
|
||||
|
||||
pub async fn sendLoginInfo(&self) {
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue