/*
* This file is part of laurelin/client
* Copyright (C) 2023 Jonni Liljamo <jonni@liljamo.com>
*
* Licensed under GPL-3.0-only.
* See LICENSE for licensing information.
*/
use bevy::prelude::{EventReader, ResMut};
use laurelin_shared::server::{
channels::DataRequestChannel,
messages::{DataRequest, DataRequestType},
};
use naia_bevy_client::Client;
use crate::Global;
use super::data_request;
pub struct GameCreateEvent;
data_request!(
create_event,
GameCreateEvent,
DataRequestType::GameCreate,
|ev| None
);
pub struct GameAllFormingEvent;
data_request!(
all_forming_event,
GameAllFormingEvent,
DataRequestType::GameAllForming,
|ev| None
);
pub struct GameMyGamesEvent;
data_request!(
my_games_event,
GameMyGamesEvent,
DataRequestType::GameMyGames,
|ev| None
);
pub struct GameInfoEvent {
pub id: String,
}
pub fn game_info_event(
mut ev: EventReader<GameInfoEvent>,
mut client: Client,
mut global: ResMut<Global>,
) {
for ev in ev.iter() {
// check if already in cache OR in cache queue
if global.games_cache.contains_key(&ev.id) {
return;
}
if !global
.games_cache_queue
.iter()
.filter(|&id| id == &ev.id)
.cloned()
.collect::<Vec<String>>()
.is_empty()
{
return;
}
// add to cache queue
global.games_cache_queue.push(ev.id.clone());
// send request
client.send_message::<DataRequestChannel, DataRequest>(&DataRequest::new(
DataRequestType::GameInfo as u8,
Some(ev.id.clone()),
));
}
}