/* * This file is part of laurelin/client * Copyright (C) 2023 Jonni Liljamo * * 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, mut client: Client, mut global: ResMut, ) { 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::>() .is_empty() { return; } // add to cache queue global.games_cache_queue.push(ev.id.clone()); // send request client.send_message::(&DataRequest::new( DataRequestType::GameInfo as u8, Some(ev.id.clone()), )); } }