mnml/server/src/warden.rs
2019-05-01 20:40:00 +10:00

49 lines
1.1 KiB
Rust

// Db Commons
use postgres::transaction::Transaction;
use failure::Error;
use game::{games_need_upkeep, game_update, game_write, game_delete};
use instance::{instances_need_upkeep, instance_update};
use net::{Db};
fn fetch_games(mut tx: Transaction) -> Result<Transaction, Error> {
let games = games_need_upkeep(&mut tx)?;
for mut game in games {
let game = game.upkeep();
match game_update(&mut tx, &game) {
Ok(_) => (),
Err(e) => {
println!("{:?}", e);
game_delete(&mut tx, game.id)?;
}
}
}
Ok(tx)
}
fn fetch_instances(mut tx: Transaction) -> Result<Transaction, Error> {
let instances = instances_need_upkeep(&mut tx)?;
for mut instance in instances {
let (instance, new_games) = instance.upkeep();
for game in new_games {
game_write(&mut tx, &game)?;
}
instance_update(&mut tx, instance)?;
}
Ok(tx)
}
pub fn warden(db: Db) -> Result<(), Error> {
fetch_games(db.transaction()?)?
.commit()?;
fetch_instances(db.transaction()?)?
.commit()?;
Ok(())
}