2022-04-28 19:31:49 +00:00
|
|
|
use crate::{db::bots::Bot, DbPool};
|
2022-04-27 18:43:12 +00:00
|
|
|
|
2022-04-28 19:31:49 +00:00
|
|
|
use crate::db;
|
|
|
|
use diesel::PgConnection;
|
|
|
|
use rand::seq::SliceRandom;
|
|
|
|
use std::time::Duration;
|
|
|
|
use tokio;
|
|
|
|
|
|
|
|
pub async fn run_ranker(db_pool: DbPool) {
|
|
|
|
// TODO: make this configurable
|
|
|
|
// play at most one match every n seconds
|
|
|
|
let mut interval = tokio::time::interval(Duration::from_secs(10));
|
|
|
|
let db_conn = db_pool
|
|
|
|
.get()
|
|
|
|
.await
|
|
|
|
.expect("could not get database connection");
|
|
|
|
loop {
|
|
|
|
interval.tick().await;
|
|
|
|
let bots = db::bots::find_all_bots(&db_conn).unwrap();
|
|
|
|
if bots.len() < 2 {
|
|
|
|
// not enough bots to play a match
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
let selected_bots: Vec<Bot> = {
|
|
|
|
let mut rng = &mut rand::thread_rng();
|
|
|
|
bots.choose_multiple(&mut rng, 2).cloned().collect()
|
|
|
|
};
|
|
|
|
play_match(selected_bots, db_pool.clone()).await;
|
|
|
|
}
|
2022-04-27 18:43:12 +00:00
|
|
|
}
|
2022-04-28 19:31:49 +00:00
|
|
|
|
|
|
|
async fn play_match(selected_bots: Vec<Bot>, db_pool: DbPool) {}
|