M server/src/main.rs => server/src/main.rs +1 -0
@@ 73,6 73,7 @@ fn main() {
systems::event::disconnect_events,
systems::event::error_events,
systems::event::tick_events,
+ systems::event::message_events,
)
.chain()
.in_set(ReceiveEvents),
A server/src/systems/event/message/mod.rs => server/src/systems/event/message/mod.rs +80 -0
@@ 0,0 1,80 @@
+/*
+ * 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),
+ );
+ }
+ }
+ }
+ }
+}
M server/src/systems/event/mod.rs => server/src/systems/event/mod.rs +3 -0
@@ 25,6 25,9 @@ use naia_bevy_server::{
use crate::{Config, Global, RuntimeTemp};
+mod message;
+pub(crate) use message::message_events;
+
pub(crate) fn auth_events(
mut ev: EventReader<AuthEvents>,
mut server: Server,
M shared/src/server/messages/datarequest.rs => shared/src/server/messages/datarequest.rs +18 -0
@@ 38,4 38,22 @@ impl DataRequestResponse {
pub enum DataRequestType {
GameAllForming = 100,
GameMyGames = 101,
+ GameCreate = 102,
+}
+
+impl DataRequestType {
+ // TODO: should prolly do this, like, not by hand.
+ pub fn from_u8(value: &u8) -> Self {
+ match value {
+ 100 => Self::GameAllForming,
+ 101 => Self::GameMyGames,
+ 102 => Self::GameCreate,
+ _ => {
+ // NOTE/TODO/FIXME: bad, veeeery bad.
+ // just... I'm not sure how to handle this best,
+ // so right now it just returns something, lol.
+ Self::GameCreate
+ }
+ }
+ }
}
M shared/src/server/messages/mod.rs => shared/src/server/messages/mod.rs +1 -0
@@ 12,6 12,7 @@ mod auth;
pub use auth::{AfterAuth, Auth};
mod datarequest;
+pub use datarequest::{DataRequest, DataRequestResponse, DataRequestType};
pub struct MessagesPlugin;