/*
* This file is part of laurelin/server
* Copyright (C) 2023 Jonni Liljamo <jonni@liljamo.com>
*
* Licensed under GPL-3.0-only.
* See LICENSE for licensing information.
*/
use bevy_ecs::{event::EventReader, system::Res};
use laurelin_shared::{
api::game::{
all_forming, create, my_games, ResponseAllForming, ResponseCreateGame, ResponseMyGames,
},
server::{
channels::DataRequestChannel,
messages::{DataRequest, DataRequestResponse, DataRequestType},
},
};
use naia_bevy_server::{events::MessageEvents, Server};
use crate::{Config, Global};
pub(crate) fn message_events(
mut ev: EventReader<MessageEvents>,
mut server: Server,
config: Res<Config>,
global: Res<Global>,
) {
for events in ev.iter() {
for (user_key, request) in events.read::<DataRequestChannel, DataRequest>() {
match DataRequestType::from_u8(&request.r#type) {
DataRequestType::GameCreate => {
// TODO: handle
let cookie = global.user_to_session_map.get(&user_key).unwrap();
let response = create(&config.api_address, &cookie);
let json = match response {
ResponseCreateGame::Error(err) => serde_json::to_string(&err).unwrap(), // TODO: handle
ResponseCreateGame::Valid(result) => {
serde_json::to_string(&result).unwrap() // TODO: handle
}
};
server.send_message::<DataRequestChannel, DataRequestResponse>(
&user_key,
&DataRequestResponse::new(request.r#type, &json),
);
}
DataRequestType::GameAllForming => {
// TODO: handle
let cookie = global.user_to_session_map.get(&user_key).unwrap();
let response = all_forming(&config.api_address, &cookie);
let json = match response {
ResponseAllForming::Error(err) => serde_json::to_string(&err).unwrap(), // TODO: handle
ResponseAllForming::Valid(result) => {
serde_json::to_string(&result).unwrap() // TODO: handle
}
};
server.send_message::<DataRequestChannel, DataRequestResponse>(
&user_key,
&DataRequestResponse::new(request.r#type, &json),
);
}
DataRequestType::GameMyGames => {
// TODO: handle
let cookie = global.user_to_session_map.get(&user_key).unwrap();
let response = my_games(&config.api_address, &cookie);
let json = match response {
ResponseMyGames::Error(err) => serde_json::to_string(&err).unwrap(), // TODO: handle
ResponseMyGames::Valid(result) => {
serde_json::to_string(&result).unwrap() // TODO: handle
}
};
server.send_message::<DataRequestChannel, DataRequestResponse>(
&user_key,
&DataRequestResponse::new(request.r#type, &json),
);
}
}
}
}
}