mirror of
https://gitlab.com/fabinfra/fabaccess/sute.git
synced 2025-03-12 14:41:52 +01:00
Properly poll the futures and get somewhere.
This commit is contained in:
parent
f8160f5b16
commit
183dd0beb8
19
src/app.rs
19
src/app.rs
@ -13,6 +13,8 @@ use crate::input::Inputs;
|
|||||||
use crate::schema::API;
|
use crate::schema::API;
|
||||||
use crate::commands::{CommandParser, Commands};
|
use crate::commands::{CommandParser, Commands};
|
||||||
|
|
||||||
|
use smol::future::FutureExt;
|
||||||
|
|
||||||
use slog::{
|
use slog::{
|
||||||
Logger,
|
Logger,
|
||||||
Drain,
|
Drain,
|
||||||
@ -68,7 +70,9 @@ impl<'a, S: Unpin> Sute<'a, S> {
|
|||||||
Some(("authenticate", m)) => {
|
Some(("authenticate", m)) => {
|
||||||
if let Some(mut api) = self.api.clone() {
|
if let Some(mut api) = self.api.clone() {
|
||||||
let log2 = self.log.clone();
|
let log2 = self.log.clone();
|
||||||
|
info!(self.log, "Going for an auth trip");
|
||||||
let f = api.authentication().then(move |mut auth| {
|
let f = api.authentication().then(move |mut auth| {
|
||||||
|
info!(log2, "Hey, an auth step!");
|
||||||
auth.mechanisms().map(move |mechs| {
|
auth.mechanisms().map(move |mechs| {
|
||||||
info!(log2, "Oh yeah about `authenticate` of yours:");
|
info!(log2, "Oh yeah about `authenticate` of yours:");
|
||||||
for mech in mechs {
|
for mech in mechs {
|
||||||
@ -76,7 +80,10 @@ impl<'a, S: Unpin> Sute<'a, S> {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
self.future.replace(Box::pin(f));
|
let old_f = self.future.replace(Box::pin(f));
|
||||||
|
if !old_f.is_none() {
|
||||||
|
warn!(self.log, "Dropping a future");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
error!(self.log, "No connection, can't authenticate!");
|
error!(self.log, "No connection, can't authenticate!");
|
||||||
}
|
}
|
||||||
@ -143,9 +150,13 @@ impl <'a, S: Unpin + Signal<Item=(u16,u16)>> Future for Sute<'a, S> {
|
|||||||
return Poll::Ready(());
|
return Poll::Ready(());
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(f) = self.future.take() {
|
if let Some(mut f) = self.future.take() {
|
||||||
pin_mut!(f);
|
match f.poll(cx) {
|
||||||
f.poll(cx);
|
Poll::Pending => {
|
||||||
|
self.future.replace(Box::pin(f));
|
||||||
|
},
|
||||||
|
_ => {},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Poll::Ready(Some(size)) = Pin::new(&mut self.signal).poll_change(cx) {
|
if let Poll::Ready(Some(size)) = Pin::new(&mut self.signal).poll_change(cx) {
|
||||||
|
@ -70,11 +70,11 @@ fn main() -> Result<(), io::Error> {
|
|||||||
|
|
||||||
let stream = smol::block_on(lex.run(stream_f));
|
let stream = smol::block_on(lex.run(stream_f));
|
||||||
|
|
||||||
let (rpc_future, mut api) = schema::bootstrap(log.clone(), stream);
|
let (rpc_future, api) = schema::bootstrap(log.clone(), stream);
|
||||||
|
|
||||||
let app = app::Sute::new(resize, log.clone(), drain.clone(), Some(api));
|
let app = app::Sute::new(resize, log.clone(), drain.clone(), Some(api));
|
||||||
|
|
||||||
let mut app_state = app.get_state();
|
let app_state = app.get_state();
|
||||||
let mut ui_state = ui::UIState::new(app_state, drain);
|
let mut ui_state = ui::UIState::new(app_state, drain);
|
||||||
|
|
||||||
let signal = app.signal();
|
let signal = app.signal();
|
||||||
@ -92,7 +92,7 @@ fn main() -> Result<(), io::Error> {
|
|||||||
terminal.resize(tui::layout::Rect::new(0, 0, x,y)).unwrap();
|
terminal.resize(tui::layout::Rect::new(0, 0, x,y)).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
terminal.draw(|f| ui::draw_ui(f, &mut ui_state));
|
terminal.draw(|f| ui::draw_ui(f, &mut ui_state))?;
|
||||||
let mut stream = signal.to_stream();
|
let mut stream = signal.to_stream();
|
||||||
loop {
|
loop {
|
||||||
if let Some(mut state) = stream.next().await {
|
if let Some(mut state) = stream.next().await {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user