/*
* 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},
},
types::user::UserPub,
};
use naia_bevy_client::Client;
use crate::Global;
pub struct PubUserDetailsEvent {
pub id: String,
}
pub fn pub_user_details_event(
mut ev: EventReader<PubUserDetailsEvent>,
mut client: Client,
mut global: ResMut<Global>,
) {
for ev in ev.iter() {
// check if already in cache OR in cache queue
if !global
.users_cache
.iter()
.filter(|&u| u.id == ev.id)
.cloned()
.collect::<Vec<UserPub>>()
.is_empty()
{
return;
}
if !global
.users_cache_queue
.iter()
.filter(|&id| id == &ev.id)
.cloned()
.collect::<Vec<String>>()
.is_empty()
{
return;
}
// add to cache queue
global.users_cache_queue.push(ev.id.clone());
// send request
client.send_message::<DataRequestChannel, DataRequest>(&DataRequest::new(
DataRequestType::PubUserDetails as u8,
Some(ev.id.clone()),
));
}
}