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 {
|
impl Default for State {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
racers: vec![RacerTime{time: Instant::now(), racer: Racer{starting_number:11, card_id: 0}}],
|
racers: vec![],
|
||||||
db: Default::default(),
|
db: Default::default(),
|
||||||
time: Instant::now(),
|
time: Instant::now(),
|
||||||
}
|
}
|
||||||
@ -57,6 +57,26 @@ struct RegisterRacer{
|
|||||||
station_id: usize,
|
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>{
|
async fn station_register(card_id: usize, time: DateTime::<Local>) -> Result<(), reqwest::Error>{
|
||||||
let register_racer = RegisterRacer{
|
let register_racer = RegisterRacer{
|
||||||
card_id: card_id,
|
card_id: card_id,
|
||||||
@ -83,18 +103,17 @@ impl State{
|
|||||||
match event {
|
match event {
|
||||||
db_update::Event::MessageReceived(s) => {
|
db_update::Event::MessageReceived(s) => {
|
||||||
let racer: Racer = serde_json::from_str(s.as_str()).unwrap();
|
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) => {
|
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;
|
self.time = time;
|
||||||
Task::none()
|
Task::none()
|
||||||
},
|
},
|
||||||
@ -103,7 +122,7 @@ impl State{
|
|||||||
let time = Instant::now();
|
let time = Instant::now();
|
||||||
let datetime = Local::now();
|
let datetime = Local::now();
|
||||||
if let Some(racer) = self.db.get(&card_id){
|
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()};
|
let racer_time = RacerTime{time, racer: racer.clone()};
|
||||||
self.racers.push(racer_time);
|
self.racers.push(racer_time);
|
||||||
}
|
}
|
||||||
@ -140,10 +159,12 @@ impl State{
|
|||||||
} else {
|
} else {
|
||||||
(duration - time, false)
|
(duration - time, false)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
let seconds = duration.as_secs();
|
let seconds = duration.as_secs();
|
||||||
|
|
||||||
|
if negative && seconds >= 10 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
let duration = text!(
|
let duration = text!(
|
||||||
"{}{:0>2}:{:0>2}.{:0>2}",
|
"{}{:0>2}:{:0>2}.{:0>2}",
|
||||||
if negative {"-"} else {""},
|
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 {
|
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())} ;
|
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();
|
env_logger::init();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user