config file
This commit is contained in:
parent
f4bd578ad3
commit
5d9b730bb6
4 changed files with 56 additions and 38 deletions
10
Rocket.toml
10
Rocket.toml
|
@ -4,9 +4,9 @@ bonus_timeout = 5000
|
||||||
event_timeout = 100
|
event_timeout = 100
|
||||||
admin_token = "root"
|
admin_token = "root"
|
||||||
serve_static = true
|
serve_static = true
|
||||||
base_teams = [
|
teams = [
|
||||||
["team00", "Équipe 00", false],
|
{ id = "team00", name = "Équipe 00", vieux = false},
|
||||||
["team01", "Équipe 01", false],
|
{ id = "team01", name = "Équipe 01", vieux = false},
|
||||||
["npc0", "PNJ 0", true],
|
{ id = "npc0", name = "PNJ 0", vieux = true},
|
||||||
["npc1", "PNJ 1", true],
|
{ id = "npc1", name = "PNJ 1", vieux = true},
|
||||||
]
|
]
|
||||||
|
|
|
@ -9,15 +9,23 @@ use std::{
|
||||||
sync::{Arc, RwLock},
|
sync::{Arc, RwLock},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
#[serde(crate = "rocket::serde")]
|
||||||
|
pub struct TeamConfig {
|
||||||
|
pub id: String,
|
||||||
|
pub name: String,
|
||||||
|
pub vieux: bool,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
#[serde(crate = "rocket::serde")]
|
#[serde(crate = "rocket::serde")]
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
pub blurred_move : (f32, f32),
|
pub blurred_move: (f32, f32),
|
||||||
pub bonus_timeout : u64,
|
pub bonus_timeout: u64,
|
||||||
pub event_timeout : u64,
|
pub event_timeout: u64,
|
||||||
pub admin_token : String,
|
pub admin_token: String,
|
||||||
pub base_teams : Vec<(String, String, bool)>,
|
pub teams: Vec<TeamConfig>,
|
||||||
pub serve_static : bool,
|
pub serve_static: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Clone)]
|
#[derive(Serialize, Deserialize, Clone)]
|
||||||
|
@ -211,7 +219,11 @@ pub fn admin_view(team: &Tracked) -> AdminTrackedInfo {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn apparent_info(watcher: &Tracked, team: &Tracked, blurred_move : (f32, f32)) -> Option<TrackedInfo> {
|
pub fn apparent_info(
|
||||||
|
watcher: &Tracked,
|
||||||
|
team: &Tracked,
|
||||||
|
blurred_move: (f32, f32),
|
||||||
|
) -> Option<TrackedInfo> {
|
||||||
if watcher.id == team.id {
|
if watcher.id == team.id {
|
||||||
None
|
None
|
||||||
} else if let Conscrit {
|
} else if let Conscrit {
|
||||||
|
|
51
src/main.rs
51
src/main.rs
|
@ -1,8 +1,8 @@
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate rocket;
|
extern crate rocket;
|
||||||
use rocket::{
|
use rocket::{
|
||||||
fs::{relative, FileServer},
|
|
||||||
fairing::AdHoc,
|
fairing::AdHoc,
|
||||||
|
fs::{relative, FileServer},
|
||||||
response::stream::Event,
|
response::stream::Event,
|
||||||
tokio::{
|
tokio::{
|
||||||
self, select,
|
self, select,
|
||||||
|
@ -11,7 +11,7 @@ use rocket::{
|
||||||
};
|
};
|
||||||
use rocket_dyn_templates::Template;
|
use rocket_dyn_templates::Template;
|
||||||
use std::{
|
use std::{
|
||||||
collections::{HashMap, VecDeque},
|
collections::VecDeque,
|
||||||
sync::{Arc, RwLock},
|
sync::{Arc, RwLock},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -31,7 +31,9 @@ fn send_coords(tracking: &Tracking, evt_queue: &TrackingEventQueue, config: &Con
|
||||||
let watcher = tracking_lock.get(id).unwrap().read().unwrap();
|
let watcher = tracking_lock.get(id).unwrap().read().unwrap();
|
||||||
let mut infos: Vec<TrackedInfo> = Vec::new();
|
let mut infos: Vec<TrackedInfo> = Vec::new();
|
||||||
for (_, tracked) in tracking_lock.iter() {
|
for (_, tracked) in tracking_lock.iter() {
|
||||||
if let Some(info) = apparent_info(&watcher, &tracked.read().unwrap(), config.blurred_move) {
|
if let Some(info) =
|
||||||
|
apparent_info(&watcher, &tracked.read().unwrap(), config.blurred_move)
|
||||||
|
{
|
||||||
infos.push(info);
|
infos.push(info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,7 +44,11 @@ fn send_coords(tracking: &Tracking, evt_queue: &TrackingEventQueue, config: &Con
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn clean_expired_evt(evt_queues: &TrackingEventQueue, admin_queue: &AdminEventQueue, config: &Config) {
|
fn clean_expired_evt(
|
||||||
|
evt_queues: &TrackingEventQueue,
|
||||||
|
admin_queue: &AdminEventQueue,
|
||||||
|
config: &Config,
|
||||||
|
) {
|
||||||
for (_, queue) in evt_queues.read().unwrap().iter() {
|
for (_, queue) in evt_queues.read().unwrap().iter() {
|
||||||
let queue = &mut queue.write().unwrap();
|
let queue = &mut queue.write().unwrap();
|
||||||
while let Some(queued_evt) = queue.front() {
|
while let Some(queued_evt) = queue.front() {
|
||||||
|
@ -66,26 +72,23 @@ fn clean_expired_evt(evt_queues: &TrackingEventQueue, admin_queue: &AdminEventQu
|
||||||
#[launch]
|
#[launch]
|
||||||
async fn rocket() -> _ {
|
async fn rocket() -> _ {
|
||||||
let rocket = rocket::build();
|
let rocket = rocket::build();
|
||||||
let config : Config = rocket.figment().extract().unwrap();
|
let config: Config = rocket.figment().extract().unwrap();
|
||||||
//TODO: read a config file on release
|
let tracking: Tracking = Arc::new(RwLock::new(
|
||||||
let tracking: Tracking = Arc::new(RwLock::new(HashMap::from([
|
config
|
||||||
|
.teams
|
||||||
|
.iter()
|
||||||
|
.map(|team| {
|
||||||
(
|
(
|
||||||
"team00".to_string(),
|
team.id.clone(),
|
||||||
RwLock::new(build_conscrit("team00".to_string(), "Équipe 0".to_string())),
|
RwLock::new(if team.vieux {
|
||||||
),
|
build_vieux(team.id.clone(), team.name.clone())
|
||||||
(
|
} else {
|
||||||
"team01".to_string(),
|
build_conscrit(team.id.clone(), team.name.clone())
|
||||||
RwLock::new(build_conscrit("team01".to_string(), "Équipe 1".to_string())),
|
}),
|
||||||
),
|
)
|
||||||
(
|
})
|
||||||
"npc0".to_string(),
|
.collect(),
|
||||||
RwLock::new(build_vieux("npc0".to_string(), "PNJ 0".to_string())),
|
));
|
||||||
),
|
|
||||||
(
|
|
||||||
"npc1".to_string(),
|
|
||||||
RwLock::new(build_vieux("npc1".to_string(), "PNJ 1".to_string())),
|
|
||||||
),
|
|
||||||
])));
|
|
||||||
let evt_queue: TrackingEventQueue = Arc::new(RwLock::new(
|
let evt_queue: TrackingEventQueue = Arc::new(RwLock::new(
|
||||||
tracking
|
tracking
|
||||||
.read()
|
.read()
|
||||||
|
@ -95,7 +98,7 @@ async fn rocket() -> _ {
|
||||||
.collect(),
|
.collect(),
|
||||||
));
|
));
|
||||||
let admin_evt_queue: AdminEventQueue = Arc::new(RwLock::new(VecDeque::new()));
|
let admin_evt_queue: AdminEventQueue = Arc::new(RwLock::new(VecDeque::new()));
|
||||||
let key: AdminKey = "root".to_string(); //TODO : random on release
|
let key: AdminKey = config.admin_token.clone();
|
||||||
println!("Admin token: {}", key);
|
println!("Admin token: {}", key);
|
||||||
let mut rocket = rocket
|
let mut rocket = rocket
|
||||||
.attach(Template::fairing())
|
.attach(Template::fairing())
|
||||||
|
|
|
@ -36,7 +36,10 @@ fn tracked_view(
|
||||||
}
|
}
|
||||||
|
|
||||||
fn evts_for(id: &str, evt_queues: &TrackingEventQueue, timeout: Duration) -> Vec<Event> {
|
fn evts_for(id: &str, evt_queues: &TrackingEventQueue, timeout: Duration) -> Vec<Event> {
|
||||||
evts_to_send(evt_queues.read().unwrap().get(&id.to_string()).unwrap(), timeout)
|
evts_to_send(
|
||||||
|
evt_queues.read().unwrap().get(&id.to_string()).unwrap(),
|
||||||
|
timeout,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/<id>/events")]
|
#[get("/<id>/events")]
|
||||||
|
|
Loading…
Reference in a new issue