POC in Rust save again only on change db and dont delete racers after leave
This commit is contained in:
parent
6aeb5e1c2a
commit
bf531b477f
@ -37,7 +37,7 @@ struct State{
|
||||
impl Default for State {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
racers: vec![RacerTime{time: Instant::now(), racer: Racer{starting_number:11, card_id: 0}}],
|
||||
racers: vec![],
|
||||
db: Default::default(),
|
||||
time: Instant::now(),
|
||||
}
|
||||
@ -57,6 +57,26 @@ struct RegisterRacer{
|
||||
station_id: usize,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Clone, Eq, PartialEq)]
|
||||
struct Racer{
|
||||
starting_number: usize,
|
||||
card_id: usize,
|
||||
}
|
||||
|
||||
enum Message{
|
||||
CardReader(card_reader::Event),
|
||||
RacerRecieved(db_update::Event),
|
||||
Tick(Instant),
|
||||
Nothing,
|
||||
}
|
||||
|
||||
impl std::fmt::Debug for Message {
|
||||
// Required method
|
||||
fn fmt(&self, _f: &mut Formatter<'_>) -> Result<(), fmtError>{
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
async fn station_register(card_id: usize, time: DateTime::<Local>) -> Result<(), reqwest::Error>{
|
||||
let register_racer = RegisterRacer{
|
||||
card_id: card_id,
|
||||
@ -83,18 +103,17 @@ impl State{
|
||||
match event {
|
||||
db_update::Event::MessageReceived(s) => {
|
||||
let racer: Racer = serde_json::from_str(s.as_str()).unwrap();
|
||||
self.db.insert(racer.card_id, racer);
|
||||
let old_racer = self.db.insert(racer.card_id, racer.clone());
|
||||
if old_racer != Some(racer){
|
||||
let json = serde_json::to_string(self).unwrap();
|
||||
Task::perform(dump_state(json), |_| Message::Nothing)
|
||||
}else{
|
||||
Task::none()
|
||||
}
|
||||
},
|
||||
};
|
||||
let json = serde_json::to_string(self).unwrap();
|
||||
Task::perform(dump_state(json), |_| Message::Nothing)
|
||||
}
|
||||
}
|
||||
Message::Tick(time) => {
|
||||
if let Some(racer_time) = self.racers.iter().next() {
|
||||
if time - racer_time.time > Duration::new(CONFIG.DURATION + 10, 0){
|
||||
self.racers.remove(0);
|
||||
}
|
||||
}
|
||||
self.time = time;
|
||||
Task::none()
|
||||
},
|
||||
@ -103,7 +122,7 @@ impl State{
|
||||
let time = Instant::now();
|
||||
let datetime = Local::now();
|
||||
if let Some(racer) = self.db.get(&card_id){
|
||||
if !self.racers.iter().any(|rt| rt.racer.card_id == card_id){
|
||||
if !self.racers.iter().any(|rt| rt.racer.starting_number == racer.starting_number){
|
||||
let racer_time = RacerTime{time, racer: racer.clone()};
|
||||
self.racers.push(racer_time);
|
||||
}
|
||||
@ -140,10 +159,12 @@ impl State{
|
||||
} else {
|
||||
(duration - time, false)
|
||||
};
|
||||
|
||||
|
||||
let seconds = duration.as_secs();
|
||||
|
||||
if negative && seconds >= 10 {
|
||||
continue
|
||||
}
|
||||
|
||||
let duration = text!(
|
||||
"{}{:0>2}:{:0>2}.{:0>2}",
|
||||
if negative {"-"} else {""},
|
||||
@ -171,27 +192,6 @@ impl State{
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Clone)]
|
||||
struct Racer{
|
||||
starting_number: usize,
|
||||
card_id: usize,
|
||||
}
|
||||
|
||||
enum Message{
|
||||
CardReader(card_reader::Event),
|
||||
RacerRecieved(db_update::Event),
|
||||
Tick(Instant),
|
||||
Nothing,
|
||||
}
|
||||
|
||||
impl std::fmt::Debug for Message {
|
||||
// Required method
|
||||
fn fmt(&self, _f: &mut Formatter<'_>) -> Result<(), fmtError>{
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pub fn main() -> iced::Result {
|
||||
let init_state = || -> State {read_to_string("state.json").ok().map(|s| serde_json::from_str(&s).ok()).flatten().unwrap_or_else(||Default::default())} ;
|
||||
env_logger::init();
|
||||
|
Loading…
x
Reference in New Issue
Block a user