/* * This file is part of laurelin/server * Copyright (C) 2023 Jonni Liljamo * * Licensed under GPL-3.0-only. * See LICENSE for licensing information. */ use std::vec; use bevy_ecs::{ event::EventReader, system::{Res, ResMut}, }; use laurelin_shared::{ api::{ game::{ all_forming, create, my_games, ResponseAllForming, ResponseCreateGame, ResponseMyGames, }, user::{self, ResponseInfo}, }, server::{ channels::{CookieRefreshChannel, DataRequestChannel}, messages::{CookieRefresh, DataRequest, DataRequestResponse, DataRequestType}, }, types::game::GamePub, }; use naia_bevy_server::{events::MessageEvents, Server}; use crate::{Config, Global}; pub(crate) fn message_events( mut ev: EventReader, mut server: Server, config: Res, mut global: ResMut, ) { for events in ev.iter() { for (user_key, request) in events.read::() { match DataRequestType::from_u8(&request.r#type) { DataRequestType::GameCreate => { // TODO: handle let cookie = global.user_to_session_map.get(&user_key).unwrap(); let wrapped = create(&config.api_address, &cookie); let game = match wrapped.response { ResponseCreateGame::Error(_err) => None, // TODO: handle ResponseCreateGame::Valid(result) => Some(result), }; let mut games_pub = vec![]; if let Some(game) = game { games_pub.push(GamePub::from_game(&game)); } server.send_message::( &user_key, &DataRequestResponse::new(request.r#type, None, Some(games_pub)), ); // update cookie global .user_to_session_map .insert(user_key, wrapped.cookie.clone()); server.send_message::( &user_key, &CookieRefresh::new(&wrapped.cookie), ); } DataRequestType::GameAllForming => { // TODO: handle let cookie = global.user_to_session_map.get(&user_key).unwrap(); let wrapped = all_forming(&config.api_address, &cookie); let games = match wrapped.response { ResponseAllForming::Error(_err) => vec![], // TODO: handle ResponseAllForming::Valid(result) => result, }; let mut games_pub = vec![]; for game in games { games_pub.push(GamePub::from_game(&game)); } server.send_message::( &user_key, &DataRequestResponse::new(request.r#type, None, Some(games_pub)), ); // update cookie global .user_to_session_map .insert(user_key, wrapped.cookie.clone()); server.send_message::( &user_key, &CookieRefresh::new(&wrapped.cookie), ); } DataRequestType::GameMyGames => { // TODO: handle let cookie = global.user_to_session_map.get(&user_key).unwrap(); let wrapped = my_games(&config.api_address, &cookie); let games = match wrapped.response { ResponseMyGames::Error(_err) => vec![], // TODO: handle ResponseMyGames::Valid(result) => result, }; let mut games_pub = vec![]; for game in games { games_pub.push(GamePub::from_game(&game)); } server.send_message::( &user_key, &DataRequestResponse::new(request.r#type, None, Some(games_pub)), ); // update cookie global .user_to_session_map .insert(user_key, wrapped.cookie.clone()); server.send_message::( &user_key, &CookieRefresh::new(&wrapped.cookie), ); } DataRequestType::PubUserDetails => { // TODO: handle let cookie = global.user_to_session_map.get(&user_key).unwrap(); let wrapped = user::info( &config.api_address, &request.data.unwrap_or("".to_string()), cookie, ); let user_details = match wrapped.response { ResponseInfo::Error(_err) => { panic!("I can't be bothered to handle this right now.") } ResponseInfo::Ok(result) => result, }; server.send_message::( &user_key, &DataRequestResponse::new(request.r#type, Some(vec![user_details]), None), ); // update cookie global .user_to_session_map .insert(user_key, wrapped.cookie.clone()); server.send_message::( &user_key, &CookieRefresh::new(&wrapped.cookie), ); } } } } }